我们编写的网络爬虫全网采集的时候总会有一些网站有意识的保护自己的网站内容,以防止网络爬虫的抓取。
常见的方式就是通过身份验证的方式来进行人机识别。也就是在登陆的入口增加或者加固防御。
这些防御有那些呢?
1、各种验证码、
2、参数的加密、
3、前端JS挖坑、
4、访问频率限制(IP黑名单)等。
其实前面的几种我们在某些情况下都是有办法解决的:
1、加密参数。其实大牛们都知道了,在客户端加密参数并没有什么用。因为爬虫完全可以将前端的js丢到一个游览器的内核环境中去执行js,这样的话,无论你怎么加密,都没有用,因为这和在游览器中运行没有什么区别,是无法进行人机识别的。
2、前端在Js脚本中挖坑。这是一些小聪明了,毕竟被抓取的网站方是这场战争的游戏规则制定者,他们能够自己制定规则,然后在没有什么漏洞的情况下,爬虫只能按照对方指定的规则一条条的来,一个坎一个坎的去跨。这种情况下,网站开发人员在一大堆的js中藏着一小段预警js作为地雷。毕竟一般情况下,爬虫都是直接请求后得到的响应是一段html的文本,并不会执行其中的js。那么这样就区分出来了,网站方可以在页面加载后执行一段js,这段js不用和服务器通信,就是默默的执行。若是这段js执行了,说明访问者很可能是人,若是没有执行,那么这个访问真绝对是爬虫了。我们在正文请求中附带上的cookie中加上一个特定的标记。告诉服务器这个请求不是人发起的。服务器得到这个消息后,针对IP标记,但是这次请求是允许通过的(隐藏我们的判断依据)。下次或者这个IP访问几次后,就将这个IP拉入黑名单。
3、验证码,这东西是主要防御手段,这里不多说,我博客里面也有一篇关于这个文章。但是,只要技术能力足够,验证码还是会被突破的。
4、IP黑名单,这个是依赖于上面的一个后台防御策略。但是再某种情况下,这种策略确实很有效,而且无解。
关于IP黑名单突破的方案
针对于采用黑名单的网站,我们可以使用的策略就是代理了,我们用各种方式弄到一大批的代理IP,然后通过使用这些代理IP去发起请求,IP被封锁了,就换下一个。
与反爬虫进行斗争,如果你能熟练使用上面的技巧就基本没有什么问题了。
下面是其他方法可以使用。在遇到相应问题采用相应方法即可。
1、代理IP使用: 使用adsl | tor | 代理 | 可以让对方无法针对ip封禁,
2、伪造Headers: 使用header的字段伪造,算是入门防止对方识别并返回假数据。
3、phantomjs模拟浏览器行为: 使用phantomjs则基本对方不能阻止你的访问。毕竟是真实的浏览器发起的请求。现在还能存在的漏洞就是可以通过一些特性检测识别出你使用的是phantomjs浏览器然后阻止,能实现这个的网站也不多。
5、验证码:包括文字字母验证码,滑块验证码,手势验证码,图形验证码。另外还有很困难的就是特别复杂的验证码破解的,只有机器学习了。
分享Tor下载:
http://www.theonionrouter.com/download/download-easy.html.en
Tor网络突破IP封锁,爬虫好搭档
https://www.cnblogs.com/likeli/p/5719230.html