有时候,我们在浏览器上使用代理IP访问网站,可以顺利访问;但在程序代码里请求网站,却请求失败,这是为什么呢?
当我们用浏览器访问网站的时候,浏览器会悄悄给服务器发个"小名片",这玩意儿就叫User-Agent,上面写着浏览器是什么、什么版本、操作系统是什么等等。
当我们用程序代码去请求网站时,其实也会悄悄给服务器发个"小名片",以python为例,上面写着的是python版本等信息。
如果网站管理员看到那些信息,大概率会觉得浏览器用户是真人在访问,没什么问题,就正常放行了。可一旦看见是 Python 用户,基本就判定为 "机器人" 了,就会给限制起来,访问肯定就失败了。
所以,我们在用代理 IP 搭着网络爬虫程序去目标网站 "捞数据" 时,必须得做 User-Agent 伪装,把它包装成浏览器用户的模样,这样才能稳稳绕过目标网站的那些规矩限制,顺利把数据给拿下来。
那么如何实现这个User-Agent伪装呢?
就拿Scrapy这个网络爬虫框架来举例,它有个settings.py文件,里面有个USER_AGENT参数。我们可以直接把这行代码改成你想伪装的User-Agent,比如改成"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"。
我们一运行爬虫,服务器那边收到的请求,就显示成伪装的浏览器发过来的了。这就好比给爬虫 "换了个行头",它就能稳稳当当把网页数据给抓过来。
如果使用Python来工作,可以先建个列表,里面塞满各种常见的User-Agent,有手机端的,也有电脑端的。然后用random库随机抽一个。每次发网络请求时,就用抽到的这个User-Agent。这样一来,就好像是各种设备在乱入访问,目标网站想要识别就更难了。
我有个朋友是做电商平台的爬虫工作,可电商平台也有反爬虫机制,就爱根据User-Agent判断是不是正常用户。他一开始总是受到限制,后来学会了User-Agent伪装技术,把爬虫伪装成普通浏览器,就能轻松绕过限制,把商品信息、用户评价这些数据都抓过来。
User-Agent伪装技术虽然很厉害,但我们在使用的时候也要悠着点,别违规,别碰法律红线。我们只有合理用它,才能在网络里自由又安全地冲浪。