在工作中进行爬虫网站时,一般网站是不允许被爬虫访问的,经常会需要提供User-Agent。为什么要提供User-agent?
因为它表示请求者的信息,可以搜集User-agent并保存,爬取过程中动态更换在User-agent,可以伪装成浏览器的形式。如果不提供User-Agent,会导致爬虫在请求网页时,请求失败。
什么是User-Agent
User-Agent中文名为用户代理,简称 UA,是Http协议中的一部分,属于头域的组成部分。它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。下面我们看一下图片便知。
我们现先打开一个网页,然后按下F12,选择network,再点击headers就可以看到User-Agent了。
当我们使用爬虫请求网页时,我们不伪装请求头,直接使用requests的GET直接请求:
.
import requests
res = requests.get('https://www.zhihu.com/')
print(res.request.headers)
print(res.status_code)
运行结果:
我们使用requests的GET请求访问知乎网页,输出结果可以看到,User-Agent直接显示为requests的版本号。但是,有没有注意到,返回的状态码既然是400,这说明什么?
知乎是设置了通过UA的反爬措施的,在爬虫中进行request请求,很多时候,都需要添加请求头,不然服务器会认为是非法的请求,从而拒绝你的访问。
我们找一个Chrome的User-Agent,只需在地址栏中输入:about:version即可,如下图所示:
User-Agent值是用来帮助服务器识别用户使用的操作系统、浏览器、浏览器版本等等信息的,而我们使用爬虫时也大多会带上这个请求头。下面使用谷歌这个User-Agent值:
import requests
headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
res = requests.get('https://www.zhihu.com/',headers=headers)
print(res.request.headers)
print(res.status_code)
运行结果:
输出结果可以看出绕过知乎这道反爬措施,只需要伪装成浏览器,将headers设置成浏览器中设置的值。
如果同一个网站被相同浏览器频繁访问,很容易被网站识别为爬虫程序,所以一般通过使用多个User-Agent随机调用的方式,可以有效避免同一个请求头访问网站。
调用python中的useragent模块
在使用 Python 做爬虫的时候,我们需要伪装头部信息骗过网站的防爬策略,Python 中的第三方模块 fake_useragent 就很好的解决了这个问题,它将给我们返回一个随机封装了好的头部信息,我们直接使用即可。
fake_useragent安装
简单来说,fake_useragent能灵活的帮助我们生成user-agent,解决了user-agent烦恼。
pip install fake-useragent
安装完成后,我们现了解一下fake_useragent的使用,生成指定浏览器的user-agent:
import fake_useragent
# 实例化 user-agent 对象
ua = fake_useragent.UserAgent()
print(ua.chrome)
运行结果:
如果要频繁抓取一个网页,每次都设置一样的UA,这也会被网站怀疑,因为一个人可能不会短时间内访问千百次那个网站,所以我们要做的是随机换UA,我们可以从这个网站上拿取:https://fake-useragent.herokuapp.com/browsers/0.1.11
把收集到UA放到列表,每次从中随机提取即可。
我们还可以使用fake_useragent随机生成user-agent
import fake_useragent
# 实例化 user-agent 对象
ua = fake_useragent.UserAgent()
print(ua.random)
print(ua.random)
print(ua.random)
运行结果:
总结
在Python爬虫的过程中经常要模拟UserAgent, 因此自动生成UserAgent十分有用,fake-useragent是个很不错的第三方库,可以随机生成各种UserAgent。
欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下: