User-Agent反爬虫的原理和绕过方法
大家好,我是志斌~
昨天的文章已经简单给大家介绍过反爬虫了,那我们今天就不再废话,直接来学信息校验型反爬虫中的User-Agent反爬虫。
一、定义
User-Agent是一种请求头,服务器可以从User-Agent对应的值中来识别用户端使用的操作系统、浏览器、浏览器引擎、操作系统语言等等。
浏览器User-Agent通常由浏览器标识、渲染引擎标识、版本信息这三部分来构成。我们可以在这个位置来查看我们的User-Agent请求头值。
二、原理
我们通过浏览器来获取数据的方式是这样的:
我们通过爬虫来获取数据的方式是这样的:
所以,我们的爬虫程序,实际上是模拟浏览器对服务器发送请求来获取数据的。
在向服务器发送的网络请求中,User-Agent是客户端用于表明身份的一种标识。所以,反爬虫工程师可以将一些爬虫程序的请求头放入服务器访问的黑名单中,当有网络请求时通过检测User-Agent请求头域值来判断客户端的类型,将其与黑名单中数据进行比对,一致时则拒绝其访问,从而有效的限制一些爬虫程序。
三、绕过
User-Agent请求头域的值是可以修改的。Requests.get()请求中有一个headers参数,可以将我们修改后的User-Agent加入,然后将爬虫程序伪装成浏览器,以此来骗过反爬虫程序。伪装代码如下:
headers = { Connection: keep-alive, Cache-Control: max-age=0, sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99", sec-ch-ua-mobile: ?0, Upgrade-Insecure-Requests: 1, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9, Sec-Fetch-Site: same-origin, Sec-Fetch-Mode: navigate, Sec-Fetch-User: ?1, Sec-Fetch-Dest: document, Referer: https://bj.ke.com/, Accept-Language: zh-CN,zh;q=0.9, } response = requests.get(url, headers=headers)
四、小结
-
User-Agent检验是一种最为初级的反爬虫方式,主要是通过服务器黑名单来限制爬虫的反爬虫方式。 对于有一定基础的小伙伴来说,这种方式基本不能够限制大家。 现在很多网站基于User-Agent检验上又增加了访问频率限制,即同一User-Agent在单位时间内访问频率过高,也会默认是爬虫,从而拉入黑名单,所以我们如果要大量需要的话,可以尝试搭建一个User-Agen池,来更好的伪装自己。 本文旨在学习与研究User-Agent检验反爬虫,请大家不要用于非法用途。
上一篇:
IDEA上Java项目控制台中文乱码