网站所有者从所有网站来访者中识别出爬虫并对其做出相应处理(通常为封禁IP)的过程,被称为反爬虫。对于网站所有者而言,爬虫并不是一个受欢迎的客人。爬虫会消耗大量的服务器资源,影响服务器的稳定性,增加运营的网络成本。可供免费查询的资源也有极大可能被竞争对手使用爬虫爬走,造成竞争力下降。以上种种因素导致网站所有者非常反感爬虫,想方设法阻止爬虫爬取自家网站的数据。
爬虫的行为与普通用户访问网站的行为极为类似,网站所有者在进行反爬虫时会尽可能地减少对普通用户的干扰。网站针对爬虫的检测方法通常分为以下几种。
1. 通过User-Agent校验反爬
浏览器在发送请求时,会附带一部分浏览器及当前系统环境的参数给服务器,这部分数据放在HTTP请求的Headers部分,Headers的表现形式为key-value对,其中,User-Agent标示一个浏览器的型号。服务器会通过User-Agent的值来区分不同的浏览器。
2. 通过访问频度反爬
普通用户通过浏览器访问网站的速度相对爬虫而言要慢得多,所以不少网站会利用这一点对访问频度设定一个阈值,如果一个IP单位时间内的访问频度超过预设的阈值,则网站将会对该IP做出访问限制。通常情况下,该IP需要经过验证码验证后才能继续正常访问,严重时,网站甚至会在一段时间内禁止该IP的访问。
3. 通过验证码校验反爬
与通过访问频度反爬不同,有部分网站不论访问频度如何,一定要来访者输入验证码才能继续操作。例如,在12306网站上,不管是登录还是购票,全部需要验证验证码,与访问频度无关。
4. 通过变换网页结构反爬
一些社交网站常常会更换网页结构,而爬虫大部分情况下都需要通过网页结构来解析需要的数据,所以这种做法也能起到反爬虫的作用。在网页结构变换后,爬虫往往无法在原本的网页位置找到原本需要的内容。
5. 通过账号权限反爬
还有部分网站需要登录才能继续操作,这部分网站虽然并不是为反爬虫才要求登录操作的,但确实起到了反爬虫的作用。