Python学习记录-项目案例实现:爬虫篇 01

项目来源

本项目来源B站UP主路飞学城视频:视频链接点这里

项目需求

利用Python爬虫实现一个简易的网页采集器

具体分析

1. 指定URL

由于本例需要实现简易数据采集器,即实现网页数据采集功能,我们需要获取的是查询结果界面。
首先随意查询一个内容,获取其查询结果页面,此处以“腾讯”为例。
查询页面
URL为https://www.baidu.com/s?ie=UTF-8&wd=%E8%85%BE%E8%AE%AF
再随机查询三个关键词,对应URL粘贴如下:

  1. https://www.baidu.com/s?ie=UTF-8&wd=%E7%BD%91%E6%98%93
  2. https://www.baidu.com/s?ie=UTF-8&wd=%E9%98%BF%E9%87%8C
  3. 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文件

检验

在浏览器中打开生成的html文件,与用户搜索得到的页面相对比,可以看出二者几乎完全一致,即本案例完成!
爬取下来的html文件
用户搜索到的页面

注意事项

  1. 在发送请求前需进行UA伪装,否则不会得到任何结果
  2. 若要进行动态输入,则需要传入参数,参数即为查询内容,参数要用字典封装
  3. 在发送请求之前要分析请求类型是get还是post
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值