大数跨境
0
0

web服务器反爬策略及爬虫反屏蔽方法

web服务器反爬策略及爬虫反屏蔽方法 曼昂网络爬虫
2015-11-02
2
导读:一些站点对于网络爬虫是又爱又恨,爱在于带来了流量,在做站点的流量统计等时,会有一些小优势;恨在于有些爬虫设计太差,请求过猛,影响其它用户对网站的正常访问。

WEB服务器屏蔽爬虫策略


一些站点对于网络爬虫是又爱又恨,爱在于带来了流量,在做站点的流量统计等时,会有一些小优势;恨在于有些爬虫设计太差,请求过猛,影响其它用户对网站的正常访问。


也是基于这些原因,服务器也会制定各种各样的反爬策略,双向保护,即不能误伤不是爬虫的,也不能让爬虫太肆无忌惮。一般的反爬策略及反爬的执行都是实时的,不会是延时或是离线的,那样没什么意义。针对不同的站点形式,会有不同的反爬策略。下边简单介绍下:


(1)基于访问的来源IP反爬

一些站点,像百度,它更多的是面向无百度帐号的访问请求,而很多爬虫看重百度的搜索数据资源,此时百度会选择基于IP的请求频率做限制,一般是单位时间内。


据我用httpclient和phantomjs实现的百度爬虫实测,百度对于非浏览器形式的反爬是基于IP的访问频率来做反爬行为,例如单IP达到每秒2个请求一段时间就会很快被反爬掉,如验证码、拒绝服务等,而百度对于phantomjs实现的爬虫,我每天的请求量达20-30万次/天时,几乎没有反爬。鉴于此也可以发现,百度的反爬,并非单靠IP的请求频率,而是有其它的辅助判定爬虫的方法,如请求的前后资源是否被请求过等等。


(2) 基于访问的来源username反爬

像新浪微博类,需要登陆后才可访问到所需要的资源,所以很多爬虫需要模拟登陆后爬取。此时的反爬设计应该是基于用户和来源IP做双向的反爬监测。


经过自行研发的新浪微博爬虫项目实测,用户每2-3分钟切换一次,然后每秒请求5-15次数据页,单IP的情况下也不会被反爬,只有在元搜索页这种情况下极少情况下会出现验证码,每天可稳定获取100万条微博数据。


在有代理服务器的情况下,结合多用户自动切换,在不异地登陆的情况下,可以达到任意爬取。但当有异地出现时,要人工打码完成验证码的输入过程,会影响抓取频率。


(3)基于请求流的实时统计等方式实现反爬

在用socket、httpurlconnection、httpclient等写的爬虫,是建立在抓包分析后,得到请求的关键URL请求流基础之上的,所以会造成很多的请求是不在请求范围中的,这些不在范围中的请求,多跟数据获取无关,但对服务器确实有很大的影响的,尤其实是富浏览器端如此盛行的当下。如一些ajax请求、广告请求、回调函数、正常的相关请求资源连接等,都会被分析给过滤掉,这也是为何该类爬虫的执行效率高的实际原因。


正因为上述原因,只要在服务器对访问记录做一些相关的统计追踪,就可以很容易发现哪些IP下一定是有爬虫存在,而非正常用户的浏览器操作行为,从而达到检查到反爬、实施反爬行为的目的。


(4)精细化的反爬策略

精细化体现在尽量不要误伤。因为现在大多数的上网行为多为NAT方式,对外只有一个IP,若针对IP直接反爬会造成大面积的误伤,对同在一个NAT下的其它用户会带来不便 ,尤其是像百度、新浪微博等这样的用户比较广的站点。


实现的方式,其实也就是多个参数的组合,比如IP+UserAgent,Username+UserAgent、IP+UserName、或者是IP、Username加一些cookies中参数的组合匹配,像cookie_id等,这样可以减少被反爬影响的主机和用户范围。


爬虫反屏蔽设计方法


爬虫和反爬其实是矛与盾的关系,只要发现对方的破绽就可以了,百度和谷歌打击一些排名靠前的垃圾网站也是这样,总是有这样或那样的漏洞,只有发现后予以及时调整就好。爬虫和反爬也是如此。


(1)找到要爬的站点的反爬策略,以新浪微博为例

通过测试就可以发现新浪微博的反爬策略中一些参数,如是对username反爬、IP反爬、请求频率阈值等。在设计爬虫时,应该将这些参数设置为配置文件,或者是动态可自行调整,这个多为对自身程序设计的考验。如在自己设计天亮微博爬虫中,可以动态判定是否出现了反爬,如出现则进行用户提前切换或是直接切换代理等处理,尽最大程序保证爬虫的稳定健壮性。


(2) 爬虫设计的实现方法选择


在第三步中的(3)中有介绍,爬虫很容易被识别的实现方式,如socket、httpurlconnection、httpclient等的实现,如果当确定服务器端的反爬很弱时,依然可以选择这些实现。如果发现很强时,则要选择phantomjs之类的实现。以我实测为例,微博爬虫完全可以选择httpclient等的实现,反爬策略已搞清,完全可以突破。但百度的就要采用phantomjs,因为它不对用户做限制,多以IP和操作相关做反爬设置,故选择之。


(3)反爬利器--IP代理服务器


现在公认的反爬最有效的方式,即用代理,这个是谁都无法破解的。但前提是代价有点高,很多人负担不起。


IP代理有三种解决方案,a、网上找免费的,学习者可以一试。b、购买 IP代理服务,数据不够安全,你的所有请求都能被代理端拿到。c、自购服务器,搭建IP代理,这是代价高但最好的选择方式,现在我利青云公司的云主机,搭建了三台代理点,用其作代理去抓取各种百度、微博、电商等数据,效果非常好,这也是利器之所在。


所以在爬虫设计时,一定要将代理服务及切换、容错等涉及在内,以提高以后的稳定性和扩展性。


(4)反爬神器--ADSL重启


基本思路就是换爬虫系统的出口IP来骗过网站的反爬策略,思路与IP代理相同,IP资源获取的方式不同,其效果也有很大的不同。毕竟代理的IP还是不变的,而且资源是有限的,而对于ADSL线路有个特点,在拨号连接时,其IP是动态变化的,如果发现网站反爬,可以重启ADSL线路,换一个新的IP,就可以继续爬取了。

当然,这种思路相对的代价也是相当高的,除非需要针对反爬很严重的站点要长期采集,否则这种思路并没有IP代理的方式经济。


【声明】内容源于网络
0
0
曼昂网络爬虫
我们是程序员开发者联盟,利用业余时间提供网络爬虫软件定制、微站、H5、网站等各类软件开发服务,有意者请留言!
内容 96
粉丝 0
曼昂网络爬虫 我们是程序员开发者联盟,利用业余时间提供网络爬虫软件定制、微站、H5、网站等各类软件开发服务,有意者请留言!
总阅读4
粉丝0
内容96