爬虫立场


爬虫的目的就是大规模地、长时间地获取数据,不过,总使用一个IP去爬网站,大规模集中对服务器访问,时间一长就有可能被拒绝,爬虫长时间爬取数据,还可能会要求验证码,即便是多个账号轮流爬取仍然会出现要求输入验证码的情况。

下面5个技巧是爬虫常用的:

技巧一:设置下载等待时间/下载频率
大规模集中访问对服务器的影响较大,也容易被服务器屏蔽IP。爬虫程序可以增大爬取时间间隔。这样比较不容易引起服务器注意。

技巧二·:修改User-Agent
最常见的就是伪装浏览器,修改User-Agent(用户代理)。
具体方法可以把User-Agent的值改为浏览器的方式,甚至可以设置一个User-Agent池(list,数组,字典都可以),存放多个“浏览器”,每次爬取的时候随机取一个来设置request的User-Agent,这样User-Agent会一直在变化,防止被墙。

技巧三:设置cookies
cookie其实是储存在用户终端的一些被加密的数据,有些网站通过cookies来识别用户身份,如果某个访问总是高频率地发请求,很可能会被网站注意到,被嫌疑为爬虫,这时网站就可以通过cookie找到这个访问的用户而拒绝其访问。
1. 自定义设置cookies策略(防止cookierejected问题,拒绝写入cookie) 在系列一那篇文章里就有自定义cookie策略设置,但更多的借鉴是官方文档的例子,设置方法其实都大同小异,因为HttpClient-4.3.1组件版本跟以前旧版本的不同,写法也有不同,另见官方文档:http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/statemgmt.html#d5e553
2. 禁止cookies 通过禁止cookie,这是客户端主动阻止服务器写入。禁止cookie可以防止可能使用cookies识别爬虫的网站来ban掉我们。 在scrapy爬虫中可以设置COOKIES_ENABLES= FALSE,即不启用cookies middleware,不向web server发送cookies。

技巧四:分布式爬取
分布式爬取的也有很多Githubrepo。原理主要是维护一个所有集群机器能够有效分享的分布式队列。
使用分布式爬取还有另外一个目的:大规模抓取,单台机器的负荷很大,况且速度很慢,多台机器可以设置一个master管理多台slave去同时爬取。

技巧五:修改IP
很多时候服务器识别的是IP,不是账号。也就是说,当需要连续抓取很多数据的时候,模拟登录没有意义。只要是同一个IP,不管怎么换账号也没有用,主要的是换IP。
web server应对爬虫的策略主要就是直接将IP或者整个IP段都封掉禁止访问,当IP被禁封后,转换到其他IP继续访问即可。方法:代理IP、本地IP数据库(使用IP池)。
爬虫

反爬虫阵营


前面说了那么多爬虫技巧,貌似爬虫很强大!爬取办法很多。那么站在反爬虫角度,服务器要如何防爬虫呢?
常见的办法是封IP。但是在上述技巧5面前,封IP也会失效。毕竟现在代理地址那么多,不能把那么多IP段全封了吧,那样很多正常用户也没办法访问网站了。而且更重要的是,那要消耗很大的人力、时间。
最直接简单的办法,其实是使用具有反爬虫功能的WAF。这里讲的反爬虫功能可不是封IP这种老办法。爬虫技巧虽多,但现在的WAF反爬虫能力,也是相当给力的。比如ShareWAF(http://www.sharewaf.com/),具备很强大的反爬虫能力,比如前面讲到爬虫有5大技巧,而ShareWAF,同样有五种反爬虫手段:

ShareWAF反爬虫手段1:封IP。
呵呵,虽然刚刚讲封IP是种低级的爬虫对付办法,但做为WAF还是保留了这个手段。

ShareWAF反爬虫手段2:爬虫识别
根据User-Agent,也是会阻拦一批爬虫。

ShareWAF反爬虫手段3:网页源码加密
爬虫获取信息,很多时候是需要从网页源码中获取链接信息的,ShareWAF的网页源码加密功能,可以直拦阻止这类爬虫。

ShareWAF反爬虫手段4:网页链接隐藏
ShareWAF的前端WAF功能,可以隐藏网页中的链接(注:是浏览器解析后的,并非网页源码),又进一步断了一条爬虫获取信息的路子。

ShareWAF反爬虫手段5:动态令牌
对于关键链接,用停牌保护,每次访问(包括爬虫的访问)都需要带有正确的令牌,否则会被阻止。

五种爬虫技巧,五种反爬手段,谁更胜一筹呢?根据ShareWAF官方给出的POC,ShareWAF可以阻止“一切”爬虫!强当的强劲!