首页常见问题正文

Python中怎样应对防爬策略?

更新时间:2023-11-30 来源:黑马程序员 浏览量:

IT培训班

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

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

1.设置User-Agent

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

每个正规的爬虫都有固定的User-Agent,因此,只要将这个字段设为知名的用户代理即可。

但是,不推荐伪装知名爬虫,因为这些爬虫很可能有固定的IP,如百度爬虫。这里,推荐若干个浏览器的User Agent,在每次发送请求时,随机从这些用户代理中选择一个即可。 具体如下:

(1) Mozilla/5.0 (Windows NT 5.1;U; en; rv:1.8.1) Gecko/ 20061208Firefox/2.0.0 Opera 9.50。

(2) Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) opera 9.50。

(3) 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的访问量有异常,就会马上提出登陆要求,并随机提供一个验证码。碰到这种情况,大多数情况下需要采取相应的技术识别验证码,只有正确输入验证码,才能够继续爬取网站。不过,识别验证码的技术难度还是比较大的。


分享到:
在线咨询 我要报名
和我们在线交谈!