河南南阳收割机被堵事件:官员缺德,祸患无穷

极目新闻领导公开“记者毕节采访被打”细节:他们打人后擦去指纹

突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

退休后的温家宝

突发!北京某院集体罢工!

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

Python爬虫从入门到出门(四)

糖甜甜甜 DataGo数据狗 2022-07-01

Python爬虫从入门到出门(四)

这一讲,我将主要为大家讲解一下反爬虫的相关原理和常见形式,以及针对各种反爬虫方法如何实现反反爬虫。

反爬虫

    常见的反爬虫系统的检测方法

    常用的反爬虫手段

反反爬虫

爬虫的礼仪

课后作业

关于作者

反爬虫

前几讲,我为大家介绍了爬虫的部署过程、静态网页的爬虫方法和动态网页的爬虫方法,大家也许在理解和学会了爬虫之后,会迫不及待的去寻找一些早已眼馋的数据网站练练手,但极有可能出师不利,很多情况下,也许并不是大家没有学会爬虫技巧,而是这些不能爬取数据的网站配置了反爬虫的系统。那么什么是反爬虫?简单来说,就是字面意思。。。反。。。爬虫。。。算了还是请教百度。。。

网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。

但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护。

于是,很多网站开始反网络爬虫,想方设法保护自己的内容。

他们根据ip访问频率,浏览网页速度,账户登录,输入验证码,flash封装,ajax混淆,js加密,图片,css混淆等五花八门的技术,来对反网络爬虫。

防的一方不惜工本,迫使抓的一方在考虑成本效益后放弃。

抓的一方不惜工本,防的一方在考虑用户流失后放弃。

(解释来自:百度百科 - “反网络爬虫”,若链接失效,请访问https://baike.baidu.com/item/%E5%8F%8D%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/16231465)

常见的反爬虫系统的检测方法

  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. 增设验证码:这个就比较常见了,但验证码最初的设计是用来防止暴力破解的,如果一般网站没有验证码的保护,那么黑客完全有可能通过程序手段发动暴力破解,即通过枚举猜测用户的密码,导致用户权益受损。在计算机和互联网功能愈发强大的今天,验证码也有了新的用途,就是反爬虫。常见的验证码有下列集中:

  • 英文数字组合验证码

  • 中文验证码

  • 滑动验证码

  • 点选文字/图像验证码

  • Google reCAPTCHA

       

  • 异步请求参数加密:现在有很多网站对于异步请求的参数会进行加密处理,但是作为用户又无法知晓具体的加密算法,如果将参数原文写入,重新请求API,得到的结果也只会是”error”。

  • 反反爬虫

    针对上面说的几种常见的反爬虫手段,所谓道高一尺,魔高一丈。。。假设我们是魔。。。那我们怎么能没点冲破层层阻碍一心只为数据的手段呢?这里给大家介绍几种常见的反反爬虫的方法。

    1. 使用代理IP:对于封禁IP的反爬虫手段,最简单的思路就是,你封一个我再买一个不就完了,的确,获得新IP的成本很低,花很少的钱就能买一大把,将购买的这些代理IP放在前面探路,的确有时能冲破反爬虫的阻碍,但作者并不推荐这种方法。以作者的自身经历来说,我曾经也爬过代理池,甚至花钱买过代理IP,还是高匿代理,但并没有什么X用,最终有效的只有个把几个,毕竟我能想到买那肯定早有前人干过这事了,这些所谓的代理IP,不知道已经上了多少平台的黑名单了。。。所以真的不建议大家花这个钱,但是纯体验一下还是能去操作一波的。

    2. 购买用户账号:与1有些相似,IP能买,那用户账号就更不值钱了,曾经某宝上也是一大把,虽然现在某宝封杀了这种服务,但买卖账号的微商还是大有人在,甚至一些二手平台上也有账号出售。对于一些必须登陆才能获取足够信息的网站,比如某浪,作者也曾经爬过,那时年少无知,用了自己的账号,结果被封了半天。。。想要爬取这类网站,可能还是要费点账号的吧。。。

    3. 验证码识别:针对上面所说的验证码的问题,现在也有很多的解决方法:

    • 对于简单的中文、英文、数字的验证码,大部分在去除干扰线和图像二值化的处理之后(可以使用Python 3的Pillow模块结合OpenCV处理,效果很理想),通过一些训练软件,比如jTessBoxEditor,再结合Tesseract,就可以达到很好的识别效果,作者也曾做过一次这个测试,是帮助老师爬取某网站的一个开放查询的信息,因为参数实在很多,人工点选太麻烦,所以用爬虫的方法来获取,但是该平台有验证码来反爬虫,于是我便用到了刚才提到的jTessBoxEditor和Tesseract工具,通过300张图片的处理和训练,达到了90%的识别率,最终顺利的爬取了1700多条数据。(有的童鞋可能想问如何进行图片的处理以及如何进行简单的识别训练,这个只能大家自行百度了,就不放链接了,防止版权问题。。。)

    • 打码平台:现在也有这么一种平台,开放接口,对于用户通过接口传来的无数验证码,发放给数以万计的人,进行手动的输入,你可能也做过或者听说过这么一种兼职,这就是打码平台,当然作者也不推荐,毕竟也是要花钱的,而且验证码数量比较大的情况下,对个人来说的确不划算。

    • 机器学习与人工智能:这是针对类似于某铁路部门网站的图像点选验证码、某乎的中文点选验证码以及某歌的reCAPTCHA验证码可能比较适用的解决方案,当然这个学习成本有点高,作者也没做过,感兴趣的可以自行学习。

  • selenium+chrome/phantomjs:这一种方法适用于类似与某宝某东这类多种反爬虫手段混合的情况,作者曾经做过一个作业,就是爬取某宝全球购某家店铺的全部商品信息及评论信息,当时作者采用的是API请求的方法,因此遭受了反爬虫系统的巨大冲击,只能爬取十多页。如果当时采用selenium+chrome/phantomjs的模式去爬,可能结果会更理想一些。phantomjs是上一讲没有提到的一个工具。

    PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.(解释来自 - “PhantomJS官方网站“,若链接打不开,请访问:http://phantomjs.org/)

    具体PhantomJS安装过程请自行百度,虽然上一讲有童鞋课后提议用phantomjs爬取动态网页,但我还是不建议,因为phantomjs并不是万金油,反爬虫系统仍能通过phantomjs的特征检测到并做出限制措施。

  • 爬虫的礼仪

    1. 降低频率:很多爬虫初学者并不重视爬虫的频率,而是一味的追求效率,代码里没有任何的阻塞语句,甚至多线程高速爬取,这样对于一些大站点来说可能还承受的住,但对一些小站点来说,可能就类似于致命的DOS攻击,因此,降低爬虫的频率是非常重要的爬虫礼仪。

    2. 依照robots.txt规则爬取:首先给大家解释一下什么是robots.txt:

      Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

      当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。百度官方建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。

      简单来说,这个robots.txt就是一个契约文件,爬虫应该从道德层面去遵循这个文件的规则,不去爬取相应的内容,但robots.txt不是命令,也不是防火墙,如同守门人无法阻止窃贼等恶意闯入者。因此,这也是我们爬虫开发者应尽量去遵循的爬虫礼仪。

    课后作业

    爬取CSDN - “人工智能”专题博客一百篇(要求:禁止使用全速爬取)。

    关于作者

    作者是一名即将毕业的大四学生,自学爬虫并作为数个爬虫项目的主要开发者,对各种爬虫有一定的了解和项目经验,目前正在自学分布式爬虫的内容,也将在后面陆续为大家更新。同时作者也是一个狂热的信息安全爱好者,如果有想要和作者交流经验或者想要提出意见的朋友,欢迎在下方留言,我会及时回复大家的。感谢大家的支持。

    文章有问题?点此查看未经处理的缓存