爬虫开发

文档状态:编辑....



Table of Contents

package

kits

反爬虫系统的检测方法

  1. 频率监测
    有些网站会设置一种频率监测的机制,对于同一IP,若在一定时间内访问的速度超过了设置的阈值,那么便会判定该IP的源头是一个爬虫机器人,从而限制访问频率或暂时禁止IP对其的访问。
  2. 频数监测
    与1有些类似,但是是对用户访问页面的数量进行统计,并在监测结果超过阈值后进行限制操作。
  3. Headers识别
    这里常用的是对UA的识别和对Referer的判断。UA就是前几讲有说过的User-Agent,是用户所使用的操作系统以及浏览器的标识。对于一些爬虫初学者来说,可能对于UA的作用理解的不是很深入,随便填了些字符进去,这就可能会因为无法识别浏览器而触发一些网站的反爬虫系统。另一个Referer表示请求是从哪个链接而来的,就比如我要出国去留学,那么我的头部文件里Referer的值就是我伟大的祖国。这个值除了用来反爬虫,也可以用来防盗链,比如作者在第二讲的时候本来想用另一个更好的网站来讲解静态网页的爬虫,但是目标网站的图片可能经常被宅男们批量下载,也被一些不良站点偷去引流,于是网站便加上了防盗链系统,其中的一个手段用到的就是这个Referer。

反爬虫手段

  1. 封禁IP
    对于一些来自同一IP的高频率、高频数的访问请求,往往很容易被作为爬虫,常见的防止这类请求的措施就是直接将IP拉入黑名单
  2. 封禁ID
    与1有些类似,这种手段往往是一些需要登录才能获取数据的网站,为避免误伤他人,将使用账号进行爬虫操作的用户ID封禁
  3. 增设验证码
    这个就比较常见了,但验证码最初的设计是用来防止暴力破解的,如果一般网站没有验证码的保护,那么黑客完全有可能通过程序手段发动暴力破解,即通过枚举猜测用户的密码,导致用户权益受损。在计算机和互联网功能愈发强大的今天,验证码也有了新的用途,就是反爬虫。常见的验证码有下列集中:zh/en/滑动/点击/识图/验证
  4. 异步请求参数加密
    现在有很多网站对于异步请求的参数会进行加密处理,但是作为用户又无法知晓具体的加密算法,如果将参数原文写入,重新请求API,得到的结果也只会是”error”。

反-反爬虫手段

  1. 代理IP
    价格昂贵,不够实用
  2. 大量注册账号
  3. 验证码识别
[1]. 对于简单的中文、英文、数字的验证码,大部分在去除干扰线和图像二值化的处理之后(可以使用Python 3Pillow模块结合OpenCV处理,效果很理想),通过一些训练软件,比如jTessBoxEditor,再结合Tesseract,就可以达到很好的识别效果,[作者也曾做过一次这个测试,是帮助老师爬取某网站的一个开放查询的信息,因为参数实在很多,人工点选太麻烦,所以用爬虫的方法来获取,但是该平台有验证码来反爬虫,于是我便用到了刚才提到的jTessBoxEditorTesseract工具,通过300张图片的处理和训练,达到了90%的识别率,最终顺利的爬取了1700多条数据。]-(自行百度如何进行图片的处理以及如何进行简单的识别训练。)
[2]. 打码平台:现在也有这么一种平台,开放接口,对于用户通过接口传来的无数验证码,发放给数以万计的人,进行手动的输入,你可能也做过或者听说过这么一种兼职,这就是打码平台,当然作者也不推荐,毕竟也是要花钱的,而且验证码数量比较大的情况下,对个人来说的确不划算。
[3]. 机器学习与人工智能:这是针对类似于某铁路部门网站的图像点选验证码、某乎的中文点选验证码以及某歌的reCAPTCHA验证码可能比较适用的解决方案,学习成本有点高.
[4]. selenium+chrome/phantomjs:这一种方法适用于类似与某宝某东这类多种反爬虫手段混合的情况,作者曾经做过一个作业,就是爬取某宝全球购某家店铺的全部商品信息及评论信息,当时作者采用的是API请求的方法,因此遭受了反爬虫系统的巨大冲击,只能爬取十多页。如果当时采用selenium+chrome/phantomjs的模式去爬,可能结果会更理想一些。phantomjs是上一讲没有提到的一个工具。