学科分类
目录
网络爬虫

反爬虫应对策略

现如今因为搜索引擎的流行,网络爬虫已经成了很普及的技术了,除了专门做搜索的Google、Yahoo、百度以外,几乎每个大型门户网站都会有自己的搜索引擎,更不用说还有各种不知名的小型爬虫了。一些智能的搜索引擎爬虫的爬取频率比较合理,不会消耗过多网站的资源,但是,很多网络爬虫对网页的爬取能力很差,经常并发上百个请求循环重复爬取,这种爬虫对中小型网站造成的访问压力非常大,很有可能会导致网站访问速度缓慢,甚至无法访问,因此现在的网站会采取一些反爬虫措施来阻止爬虫的不当爬取行为。

对于采取了反爬虫措施的网站,爬虫程序需要针对这些措施采取相应的应对策略,才能成功地爬取到网站上的数据。常用的应对策略包括以下几种。

1. 伪装User-agent

User-agent表示用户代理,是HTTP协议中的一个字段,其作用是描述发出HTTP请求的终端信息,比如操作系统及版本、浏览器及版本等,服务器通过这个字段可以知道访问网站的是谁。

每个正规的爬虫都有固定的User-agent,因此,只要将这个字段设为知名的用户代理,就能够成功伪装。不过,不推荐伪装知名爬虫,因为这些爬虫很可能有固定的IP,如百度爬虫。这里,我们推荐若干个浏览器的User-agent,在每次发送请求的时候,随机从这些用户代理中选择一个就行,具体如下:

  • Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50
  • Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0

2. 使用代理IP

如果网站根据某个时间段以内IP访问的次数来判定是否为爬虫,一旦这些IP地址被封掉后,User-agent伪装就失效了。遇到这种情况,可以使用代理IP完成。所谓代理IP就是介于用户和网站之间的第三者,即用户先将请求发送给代理IP,之后代理IP再发送到服务器,这时服务器会将代理IP视为爬虫的IP,同时用多个代理IP,可以降低单个IP地址的访问量,极有可能逃过一劫。

有些网站提供了一大批代理IP,我们可以将其存储起来以备不时之需。不过,很多代理IP的寿命比较短,需要有一套完整的机制来校验已有代理IP的有效性。

3. 降低访问频率

如果没有找到既免费又稳定的代理IP,则可以降低访问网站的频率,这样做可以达到与用户代理一样的效果,防止对方从访问量上认出爬虫的身份,不过爬取效率会差很多。为了弥补这个缺点,我们可以基于这个思想适时调整具体的操作。例如,每抓取一个页面就休息若干秒,或者限制每天抓取的页面数量。

4. 验证码限制

虽然有些网站不登陆就能访问,但是它一检测到某IP的访问量有异常,就会马上提出登陆要求,并随机提供一个验证码。碰到这种情况,大多数情况下需要采取相应的技术识别验证码,只有正确输入验证码,才能够继续爬取网站。不过,识别验证码的技术难度还是比较大的。

点击此处
隐藏目录