新手爬虫采集常遇到的墙问题

但凡多采集一些网站,多持续采集一段时间,就一定会被管理员发现,他们可能采取一系列的手段来阻止我们的采集过程。主要表现就是访问不了了、访问几次就断了,然后手动访问,或者换个终端以后完全没问题。

面对这种情况,首先,我们要明确以下几个问题:

  1. 我的爬虫是否过于频繁访问,给对方服务器带来了不可承受的负担,影响了对方服务器的业务?
  2. 我的爬虫是否在采集对方不对外公布的信息,导致触犯了对方的防御机制?
  3. 我的爬虫是否有bug,导致对方不堪重负?

鉴于以上问题,首先我们要明确自己的道德和法律边界,是否逾越了国家法律,是否损害了他人利益?这些事主观问题,是红线问题,必须要进行考虑。

其次,就是思考自己的爬虫问题了,如果有bug,导致对方服务器不堪重负也不行,因此我们还需要对对方网站进行一些监控,看看是否影响了对方的业务。

基于以上,完成爬虫以后,经常会遇到一些被管理员和防火墙拦截的问题和原因也就出来了,我总结一下:

  1. 管理员不想让你访问。这种情况分两种,一种是,管理员登录后台一看,有个家伙10个小时就访问了我的1万次,比其他人真是遥遥领先!如果是我,第一反应就是封了再说,肯定有问题,都不用分析。另一种是,我感觉有人在爬数据,我要把他找出来。
  2. 网站配置不让你访问。这个主要是网站限制,比如tomcat或者Nginx,限制某个连接访问时间,因为,如果这个连接一直在这里,然后不断有新的连接进来,那么连接池迟早满了,最终完蛋,你这就是要DDOS攻击我,所以我可以设置多长时间你没动静,我就给你断了。
  3. 防火墙配置。这个就难了,因为防火墙管的很细,如果是服务器WAF那就很头疼,他在拦截DDOS的时候,就非常容易把爬虫也拦截掉。如果要绕过WAF,那就是一种入侵行为了,要从页面采集数据就只能欺骗WAF,继续刷新数据页面。

如何避开以上策略,主要就是欺骗和伪装。

  1. 逃避IP识别。通过采用或者构建IP代理,变换IP地址,减少单IP对规则的触发,封禁恶意IP是网站管理过程中最常用的方式。

  2. 变换请求内容。虽然你的IP变了,但是还是这个浏览器、还是这个cookies记录,也会被识别。这块我还是不太理解,要再深入了解一下http请求的过程,还有cookies的作用才行。这个可以通过变换cookies和header进行伪装。

  3. 降低访问频率。一般如果单位时间内,访问网站的次数过高,很容易被判断为是CC攻击,并且会对服务器带来很大的压力,影响正常业务,这就背离了我们进行数据采集的初衷了,所以设置一个sleep(),降低一下刷新频率,减少一些对服务器资源的占用,是利人利己的行为。

  4. 慢速攻击判别。第一次认识到,慢了也会被干掉。慢速攻击是http慢速攻击是利用http合法机制,在建立连接后,尽量长时间保持连接,不释放,达到对HTTP服务攻击,攻击者发送POST请求,自行构造报文向服务器提交数据,将报文长度设置一个很大的值,且在随后每次发送中,每次只发送一个很小的报文,这样导致服务器一直等待数据,连接始终一直被占用。如果攻击者使用多线程或傀儡机子去做同样操作,服务器WEB容器很快就被占满TCP连接而不再接受新请求,从而导致服务器崩溃、服务失效。这个最好就是采用多线程异步采集,同时及时把之前的连接关闭,并且控制数量进行。

    感兴趣的可以看这个:https://www.cnblogs.com/xiaoliu66007/p/10174672.html

总之,在采集数据的时候,不要想着网站管理人员那么烦,要多站在别人的角度上思考,采用别人能接受的方式获取数据,别人才能让你好好的获取数据,是一个双赢的行为,不然就只能从入门到入牢的转变了,大家都不容易,互相给口饭吃。

猜你喜欢

转载自blog.csdn.net/u010472858/article/details/104293705