反爬虫技术及解决方案

不同类型的网站都有不一样的反爬虫机制,判断一个网站是否有反爬虫机制需要根据网站设计架构、数据传输方式和请求方式等各个方面评估。下面是常用的反爬虫机制。

  1. 用户请求的Headers。
  2. 用户操作网站行为。
  3. 网站目录数据加载方式。
  4. 数据加密。
  5. 验证码识别。

网站设置的反爬虫机制不代表不能爬取数据。

1、基于用户请求的Headers
从用户请求的Headers反爬虫是最常见的反爬虫机制。很多网站会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。
如果遇到了这类反爬虫机制,就可以在爬虫代码中添加Headers请求头,将浏览器的请求信息以字典的数据格式写入爬虫的请求头。对于检测Headers的反爬虫,在爬虫发送请求中修改或者添加Headers就能很好的解决
2、基于用户操作网站行为
有一部分网站是通过检测用户行为来判断用户行为是否合规。网站服务器会根据已设定的判断条件判断访问间隔是否合理,从而达到用户行为是否合理。遇到用户行为判断这种情况,可使用IP代理,IP可在IP代理平台上通过API接口获取,每个请求几次更换一个IP,这样就能很容易地绕过第一种反爬虫。还有一种解决方案是在没吃请求间隔几秒后再发送下一次请求。只需要在代码里面加一个延时功能就可以简单实现,有些有逻辑漏洞的网站可以通过请求多次、退出登录、重新登录、继续请求来绕过同一个账号短时间内不能多次进行相同请求的限制。

3、基于网站目录数据加载方式
上述几种情况大多数都出现在静态页面,还有一部分网站是由Ajax通过访问接口的方式生成数据加载到网页。遇到此情况,首先分析网站设计,找到Ajax请求,分析具体请求参数和响应的数据结构及其含义,在爬虫中模拟Ajax请求,就能获取所需数据。
4、基于数据加密
对于网站把请求参数加密处理的情况,这种情况可以先找到加密代码,加密代码主要是JavaScript实现的,分析代码的加密方式,然后在爬虫代码中模拟其加密方式,再发送请求。这是最优解决方案,但是花费时间较多难度较大。
另一种解决方案,使用Selenium+PhantomJS框架(自动化测试技术),调用浏览器内核,利用Selenium模拟人为操作网页并触发页面中的JS脚本,完整的实现自动化操作网页,数据是从网页上自动获取的。这种框架几乎能绕过大多数反爬虫,因为PhantomJS一个没有界面的浏览器。一般情况下不用。
5、基于验证码识别
最有效的反爬虫技术就是验证码,目前对复杂的验证码还没有做到很好地识别验证,只能通过第三方平台处理或者OCR技术(光学字符识别)识别

你可能感兴趣的:(笔记)