项目案例实现|Python爬虫 01:简易网页采集器
项目来源
本项目来源B站UP主路飞学城视频:视频链接点这里
项目需求
利用Python爬虫实现一个简易的网页采集器
具体分析
1. 指定URL
由于本例需要实现简易数据采集器,即实现网页数据采集功能,我们需要获取的是查询结果界面。
首先随意查询一个内容,获取其查询结果页面,此处以“腾讯”为例。
URL为https://www.baidu.com/s?ie=UTF-8&wd=%E8%85%BE%E8%AE%AF
再随机查询三个关键词,对应URL粘贴如下:
- https://www.baidu.com/s?ie=UTF-8&wd=%E7%BD%91%E6%98%93
- https://www.baidu.com/s?ie=UTF-8&wd=%E9%98%BF%E9%87%8C
- https://www.baidu.com/s?ie=UTF-8&wd=%E5%BE%AE%E4%BF%A1
对比可发现规律:?后的部分为两个参数,ie表示编码格式,wd表示查询内容(这里出现乱码是因为使用了utf-8编码)。所以,查询界面的通用URL地址为https://www.baidu.com/s
,?可加可不加。
将此URL写入代码段,如下:
url = 'https://www.baidu.com/s'
2. UA伪装
UA伪装的对应反爬机制为UA检测,即网站会根据发送请求用户的User-Agent来判断是否为用户本人操作,如检测到为爬虫程序则不会返回响应数据。为了避免这一点,在发送请求之前需进行UA伪装。对应的User-Agent可在任意网页打开抓包工具查看,将UA值复制到代码段即可(不同操作系统,不同浏览器,UA值就不同)。
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'
}
3. 发送请求
由于本例需求为整张页面的抓取,故使用get方法发送请求。
4. 获取响应结果
因为本例想获取的是整张页面的源码数据,故将响应结果以text形式保存。
response = requests.get(url=url, headers=headers)
page_text = response.text
5. 持久化存储
本例较为简单,故直接保存至同目录下的html文件中即可
with open('./result.html', 'w', encoding='utf-8') as fp:
fp.write(page_text)
6. 个性化需求
让数据采集器能够动态采集,即模拟用户查询的真实情况,写一个input捕获用户输入
项目代码
整段代码如下
url = 'https://www.baidu.com/s'
# 进行UA伪装
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
# 使输入动态化
word = input('输入查询内容:')
# 用字典封装
param = {'wd': word}
res = requests.get(url=url, params=param, headers=header)
page_text = res.text
filename = word + '.html'
with open(filename, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print('{}读取成功!'.format(filename))
运行结果
输入查询内容:人人网
人人网.html读取成功!
检验
在浏览器中打开生成的html文件,与用户搜索得到的页面相对比,可以看出二者几乎完全一致,即本案例完成!
注意事项
- 在发送请求前需进行UA伪装,否则不会得到任何结果
- 若要进行动态输入,则需要传入参数,参数即为查询内容,参数要用字典封装
- 在发送请求之前要分析请求类型是get还是post