爬虫的道魔策略

网站的反爬虫
网络爬虫在访问网站并不是一个常规的用户行为,通常都会对网站的带宽和服务器带来一些压力。一些比较健壮的网络爬虫通常会控制对网站的访问频率。
但是大多数网络爬虫可能并不会采取措施,为了防止网络爬虫带来的负面影响,一些的网站会对来访者的访问做限制。

 

 

 

常见的反爬虫措施

网站常用的反爬虫措施有:
1.人工识别、限制IP
当网站运维人员发现网站服务器负载突然增高等异常时,通过分析访问记录可以找到爬虫的来源IP,然后直接封锁爬虫的IP地址或者所在的C网段地址
网络爬虫的应对措施:采用代理

2.通过User-Agent+IP反爬虫
有时候通过简单的封锁C网段地址很可能造成“误伤”,一个C段网址中如果只有一个爬虫,那么其他的用户就被“误杀”了。不同的用户访问网站的时候有不同
的User-Agent,所以通过User-Agent+IP反爬虫也是一种策略。
爬虫在爬取网页的时候,为了尽可能的将自己伪装为浏览器,通常会声明自己的User-Agent信息,通过获取User-Agent信息和IP,网站就可以通过User-Agent+IP
的形式来反爬虫。
网络爬虫的应对措施:采用代理+动态User-Agent

3.延时响应
对于高级一点的爬虫,不管是限制IP还是User-Agent+IP反爬虫,都能轻松绕过。于是聪明的网站运维人员想出了一个高招,针对网络爬虫想要在短时间
内获取大量信息的特点,设计出了延时响应的反爬虫策略:如果网站反爬虫程序通过分析User-Agent和IP发现来访者可能是网络爬虫,则会对请求作出延时响应,如果延时的时间
超过了爬虫设置的连接超时时间,爬虫将报连接超时的错误。这种策略比User-Agent+IP好的地方就是可以减少一些“误伤”,但对于爬虫来说这种策略和上一种没有本质区别,
只是惩罚爬虫的方式不一样了。

网络爬虫的应对措施:采用代理+动态User-Agent

4.将重要数据使用JS加载
网络爬虫访问网站是为了采集需要的信息。如果将这些数据使用JS来加载,对于没有执行JS能力的大部分爬虫来说这简直就是灭顶之灾。
(各大电商网站就是使用这种方法)

网络爬虫的应对措施:分析JS请求的URL以及参数,直接对此URL进行请求

5.限制访问频率
对同一个IP或者User-Agent的访问频率做限制。如果爬虫的访问频率超过限制,则返回验证码页面或者限制访问。

网络爬虫的应对措施:分布式或者适当减低访问频率

6.需要登录访问
如果是内容比较优质的网站,通常会要求用户登录后访问。而对于爬虫来说,登录是一个难点,尤其是有复杂验证码的登陆。

网络爬虫的应对措施:程序识别验证码模拟登陆、人工识别验证码模拟登陆

爬虫和反爬虫的终于对决(假设一下):
反爬虫:如上六种反爬策略随意组合,此外设置爬虫陷阱。
爬虫:无节操的高并发访问网站,玉石俱焚。

题外话:
对于网站来说,反爬虫措施过于严格可能导致百度谷歌等搜索引擎不能收录网站。

 

对于爬虫开发者来说,在抓取数据的时候尽量不要对目标网站造成太多的负面影响。

 

以上来自:

http://liangqingyu.com/blog/2014/12/29/%E7%BB%86%E8%AF%B4%E5%9E%82%E7%9B%B4%E5%9E%8B%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%EF%BC%88%E5%8D%81%E4%B9%9D%EF%BC%89%E3%80%90%E7%AA%81%E7%A0%B4%E8%AE%BF%E9%97%AE%E9%99%90%E5%88%B6%E3%80%91.html

 

 

来自:http://liangqingyu.com/blog/2015/07/03/%E7%BB%86%E8%AF%B4%E5%9E%82%E7%9B%B4%E5%9E%8B%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%EF%BC%88%E4%BA%8C%E5%8D%81%EF%BC%89%E3%80%90%E5%BA%94%E5%AF%B9%E5%B0%81IP%E4%B8%80%E7%A7%8D%E5%8F%AF%E8%83%BD%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95%E3%80%91.html

 

需要解决的问题

 

在网络爬虫抓取信息的过程中,如果抓取频率高过了网站的设置阀值,将会被禁止访问。通常,网站的反爬虫机制都是依据IP来标识爬虫的。
于是在爬虫的开发者通常需要采取两种手段来解决这个问题:
1、放慢抓取速度,减小对于目标网站造成的压力。但是这样会减少单位时间类的抓取量。
2、第二种方法是通过设置代理IP等手段,突破反爬虫机制继续高频率抓取。但是这样需要多个稳定的代理IP。

代理IP可以搜索到免费的,但是可能不太稳定,也有收费的,但是不一定划算,也可能不是长久之计。

说明:本人墙裂建议不要高频率抓取。

普通的基于ADSL拨号的解决办法

通常,在抓取过程中遇到禁止访问,可以重新进行ADSL拨号,获取新的IP,从而可以继续抓取。但是这样在多网站多线程抓取的时候,如果某一个网站的抓取被禁止了,
同时也影响到了其他网站的抓取,整体来说也会降低抓取速度。

一种可能的解决办法

同样也是基于ADSL拨号,不同的是,需要两台能够进行ADSL拨号的服务器,抓取过程中使用这两台服务器作为代理。
假设有A、B两台可以进行ADSL拨号的服务器。爬虫程序在C服务器上运行,使用A作为代理访问外网,如果在抓取过程中遇到禁止访问的情况,立即将代理切换为B,
然后将A进行重新拨号。如果再遇到禁止访问就切换为A做代理,B再拨号,如此反复。如下图:

使用A为代理,B拨号:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值