爬虫第一周学习心得

爬虫第一周学习心得

1.页面源代码解析

首先判断页面是静态页面还是动态页面

可以使用

resp = requests.get('url')
print(resp.text)

解析出页面代码判断是否是静态页面,

  • 动态页面获取方式
driver = webdriver.Chrome()
driver.get('url')
# page_source是带动态内容的页面源代码
soup = bs4.BeautifulSoup(driver.page_source, 'html.parser')
print(soup)

或者

寻找网页JSON,找到JSON之后解析JSON代码

resp = requests.get('url')
data_dict = resp.json()
print(data_dict)

2.指定标签内容爬取

  • 正则表达式方式
resp = requests.get('url')
pattern = re.compile(r'正则表达式')
results = pattern.findall(resp.text)
  • HTML标签查找方式
resp = requests.get('url')
soup = bs4.BeautifulSoup.select('selector --> 标签层级方式获取')
for i in soup:
    # 获取标签下的文字信息
    print(i.text)
    # 获取标签内属性内容
    print(i.attrs['标签属性名'])

---------------------------------------------华丽的分割线---------------------------------------------

API接口调用

  • 首先从API提供网站申请API接口,拿到key值和接口调用链接
  • 通过json()解析json数据
  • 获取json数据中所需信息

例:垃圾分类信息

word = input('请输入一个垃圾:')
resp = requests.get(
    f'http://api.tianapi.com/txapi/lajifenlei/index?key={key}&word={word}'
)
new_list = resp.json()['newslist']
for news in new_list:
    print(news['name'], news['type'], news['aipre'], news['explain'], news['contain'], news['tip'])

动态Cookie获取

详情请借鉴《关于BOSS直聘动态Cookie的自动化获取》

https://blog.csdn.net/weixin_42788769/article/details/112341879

---------------------------------------------华丽的分割线---------------------------------------------

爬虫注意事项

爬虫虽好,但请规范!爬虫虽好,但请规范!爬虫虽好,但请规范!爬虫虽好,但请规范!

  • 模拟浏览器信息
# 使用HTTP请求头之User-Agent模拟浏览器的信息进而骗过网站
resp = requests.get(
    url='https://movie.douban.com/top250',
    headers={
     
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4375.0 Safari/537.36 Edg/89.0.756.0'
    }
)
  • 必要时使用Cookie
# 因为有的页面爬取的时候,需要登录后才能爬,比如知乎,如何判断一个页面是否已经登录,通过判断是否含有cookies就可以,我们获取到cookie后就可以携带cookie来访问需要登录后的页面了。
resp = requests.get(
        url=detail_url,
        headers={
     
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4375.0 Safari/537.36 Edg/89.0.756.0',
            'Cookie': 'll="118318"; bid=aCAd756EKMw; _vwo_uuid_v2=DFB59E4F87AA4AA5871B1705DE6622267|1d87dac2bf747016b497357b2e3d3852; dbcl2="229867820:DeXvsQ5h5ZE"; ck=T5bR; push_noty_num=0; push_doumail_num=0'
        }
    )
  • 爬虫运行时进行适当的休眠
# 模拟人访问网页时的停留时间
# 休眠时间可自行调整
time.sleep(random.random(3,5))

---------------------------------------------华丽的分割线---------------------------------------------

爬虫多线程和多进程机制

  • 创建线程池
  • 将耗时间的任务放到线程池中交给线程来执行
  • 但多线程和多进程要考虑死锁问题 - 比如银行存取钱
    • 不能同时存和取(拿到锁和释放锁过程)
    • 要判断取钱金额是否大于账户内金额
      • 余额不足,暂停取钱,等待存钱,余额充足,唤醒取钱
# 多线程的基本代码
with ThreadPoolExecutor(max_workers=16) as pool:
    futures = []
    
    f = pool.submit(download_picture, href)
                futures.append(f)
        
            for f in futures:
                f.result()

---------------------------------------------华丽的分割线---------------------------------------------

Python读写Excel文件

Python对于Excel文件操作的便捷性

# 写CSV(逗号分隔值)文件
import csv

with open('test.csv', 'w', encoding='gbk') as file:
    csv_writer = csv.writer(file, quoting=csv.QUOTE_ALL)
    csv_writer.writerow(['关羽', 90, 80, 70])
    csv_writer.writerow(['张飞', 75, 92, 50])
    csv_writer.writerow(['赵云', 99, 98, 97])
    csv_writer.writerow(['马超', 95, 82, 55])
    csv_writer.writerow(['黄忠', 90, 80, 90])
# 读取CSV文件
import csv

with open('xxxx.csv', 'r') as file:
    csv_reader = csv.reader(file)
    for row in csv_reader:
        print(row)
wb = openpyxl.Workbook()
# 创建工作簿名
sheet = wb.create_sheet('Top250')
# 表格的每一列的名
col_names = ('排名', '名称', '评分', '类型', '制片国家', '语言', '时长')
# 表格的每一列的名循环写进每一列
for index, name in enumerate(col_names):
    sheet.cell(1, index + 1, name)
rank = 0
movie_details = [rank, title, score,gener, country, language, duration]
# 将列表中的信息写入Excel文件表单的单元格中
for index, item in enumerate(movie_details):
    sheet.cell(rank + 1, index + 1, item)

你可能感兴趣的:(Python学习,IT,免费,python,爬虫)