首先了解一下浏览器内核:浏览器内核检测工具 Browser kernel v2.6 测试查看浏览器内核版本
使用这个工具可以直接查看操作系统、浏览器内核、内核版本等信息。
再来了解一下User-Agent:用户代理,网站的服务器通过识别UA(User-Agent)来确认用户使用的操作系统、浏览器内核等信息,因为有了这些信息说明用户是通过浏览器进行访问的,而不是爬虫进行爬取,因此通过UA识别就是反爬的一种手段。UA的内容就是浏览器的内核。
第一张图是检测出来的浏览器内核信息,第二张图是浏览器请求标头中的UA,两者信息一致。
获取浏览器内核
如果网页使用UA反爬,那么可以让爬虫伪装成浏览器,骗过检测从而获取信息。
首先从网页的元素中可以看出,浏览器内核存放的位置在div标签下的i标签里:
首先使用不加UA的爬虫获取信息:
import requests from lxml import etree url='https://ie.icoa.cn/' res=requests.get(url) res.encoding='utf-8' root=etree.HTML(res.text) ua=root.xpath('//div[@class="ua"]/i/text()') print(ua)
从结果来看,这不是我们爬取的浏览器内核,说明爬取失败,网页有反爬机制。
添加UA进行爬取信息(伪造一个标头):
import requests from lxml import etree url='https://ie.icoa.cn/' head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47"} #正确的头 res=requests.get(url,headers=head) res.encoding='utf-8' root=etree.HTML(res.text) ua=root.xpath('//div[@class="ua"]/i/text()') print(ua)
我们首先写了浏览器内核,向requests请求中添加了这个UA,就是伪造了标头,让服务器认为是用户通过浏览器访问,这时爬取的结果和我们想要的一样,说明爬取成功。
以上就是使用UA和不使用UA对爬虫造成的影响。
fake_useragent模块
刚刚了解到服务器通过识别UA来判断是否浏览器访问,UA相当于浏览器的身份证,在使用爬虫的时候如果频繁更换UA进行访问,那么服务器就很难识别出爬虫,避免反爬,fake_useragent的作用就是提供频繁更换UA的功能。
随机生成一个浏览器内核
import random from fake_useragent import UserAgent ua=UserAgent() print(ua.random)
生成一个ie浏览器内核:
import random from fake_useragent import UserAgent ua=UserAgent() print(ua.ie)
浏览器代理池
将浏览器内核放在一起,直接调用
import requests import random from lxml import etree from fake_useragent import UserAgent url='https://ie.icoa.cn/' ua=UserAgent() useragent=[] for i in range(5): #获取五个内核 useragent.append(ua.random) for i in range(5): this_agent=random.choice(useragent) #随机获取里面的内核信息 head={'user-agent':this_agent} #标头 res=requests.get(url,headers=head) #请求获取 res.encoding='utf-8' root=etree.HTML(res.text) #element对象转换 result=root.xpath('//div[@class="ua"]/i/text()') print(result)
实现的功能还是获取浏览器内核,从结果可以看出访问服务器的时候浏览器内核随机在生成的内核池中选择: