反爬虫策略调研与分析

爬虫时代

在互联网上,各类的信息数据相当大一部分是发布在Web页面上的,于是一大批以此为生的网站便诞生了。 baidu和google便成为其中的佼佼者,它们是这个星球上最大牌的爬虫,最多的爬虫,为这个世界的Web页面建立索引,方便大家查找信息。在爬虫基础之上,才有了大家每天都离不开的搜索引擎服务。
爬虫可以爬取任何可以访问的Web页面,开发一个爬虫其实非常的简单和容易。但是并不是所有的页面都是非常容易获取信息的,于是便诞生了各类的反爬虫策略。道高一尺魔高一丈,反爬虫策略的兴起,则在一定程度上提高了爬虫的入门门槛。

为什么要反扒?

  1. 爬虫的PV访问如果量很大,且无节制,会造成大量的服务器资源消耗
  2. 公司的核心数据被爬虫无偿爬取,对于公司来说降低了竞争力,这是一种损失。
  3. 爬虫爬取的数据,是有价值的,但是对于被爬取方却无法从中得到好处。
  4. 4.

反爬虫策略

  1. robots.txt
    robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
    robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。robots.txt允许使用类似”Disallow: *.gif”这样的通配符.
    对于搜索引擎的爬虫来说,会遵守类似规则,对于个人开发的爬虫来说,则一般不会关注robots.xml中的约束。
  2. 后台对访问进行统计,如果单个IP访问超过阈值,予以封锁。
    在某个时间段内,对于来源于特定ip的请求,超过某个阈值之后,对于这个IP的访问进行封锁。
    分析: 容易封锁正常访问的用户,误伤好人。 目前IP资源非常廉价,IP资源池可以很低成本低获取,都是包月服务,这个是最容易突破的防线。
  3. 后台对访问进行统计,如果单个session访问超过阈值,予以封锁。
    对单个session的访问次数进行统计,超过法制,进行封锁。
    分析: 这个策略很基础,基本无效。 当连接断开后,重新连接,即可重新生成session。
  4. 基于规则的验证码人机检查
    当系统怀疑当前的请求是来自于机器人或者爬虫之时,将弹出验证码对话框,要求用户填入正确的验证码,方可正常访问。
    分析: 对于某些情况下,正常的用户访问也会被提示验证码,用户体验不好。
    爬虫可以基于tensorflow或者第三方接口自动提取验证码,并自动填入,从而突破验证码策略。普通的验证码识别是有一定的技术门槛和复杂度的。
  5. 基于Cookie中特殊值的判定。
    通过cookie限制抓取信息,比如我们模拟登陆之后,想拿到登陆之后某页面信息,千万不要以为模拟登陆之后就所有页面都可以抓了,有时候还需要请求一些中间页面拿到特定cookie,然后才可以抓到需要的页面。
    分析: 可以有效地阻止大部分的爬虫,当不符合cookie中的值时,则跳转或者喂给其假数据。
    解决办法: 需要针对流程进行分析,观察整个过程都请求了哪些URL(主要包括HTML、JS、XHR),挨个试,试到成功为止
  6. 对于核心数据的加载,使用动态Javascript脚本来加载。
    当爬虫请求的页面返回时,其中并没有期望的核心数据。其中的数据是通过javascript动态加载的脚本,在脚本中使用ajax请求,然后利用回调函数的方式来将数据填充到页面中。在页面实现层面就是将数据与页面显示分离开。
    分析: 对于简单爬虫来说,是一场噩梦,很多核心的数据是拿不到的。
    解决办法: 需要分析页面找到对应的请求,然后分析请求,模拟请求得到最终想要的数据。或者使用无头浏览器的方式也可以规避这个问题。
  7. javascript渲染
    网页开发者将重要信息放在网页中但不写入html标签中,而浏览器会自动渲染

参考资料

  1. scrapy-proxies https://github.com/aivarsk/scrapy-proxies
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章