什么是爬虫和反爬虫?

  • 爬虫:使用技术手段,批量获取网站信息。关键在于批量。
  • 反爬虫:使用技术手段,阻止别人批量获取自己的网站信息。关键也在于批量。
  • 误伤:在反爬虫的过程中,错误的将普通用户识别为爬虫。误伤率高的反爬虫策略,效果再好也不能用。
  • 拦截:成功地阻止爬虫访问。这里会有拦截率的概念。通常来说,拦截率越高的反爬虫策略,误伤的可能性就越高。因此需要做个权衡。
  • 成本:机器成本与人力成本的总和。

注意:人力成本也是资源,而且比机器更重要。因为,根据摩尔定律,机器越来越便宜。而根据IT行业的发展趋势,程序员工资越来越贵。因此,让对方加班才是王道,机器成本并不是特别值钱。

传统反爬虫手段

  • 封IP:后台对访问进行统计,如果单个IP访问超过阈值,予以封锁。
    这个虽然效果还不错,但是其实有两个缺陷,一个是非常容易误伤普通用户,另一个就是,IP其实不值钱,几十块钱甚至有可能买到几十万个IP。所以总体来说是比较亏的。不过针对三月份呢爬虫,这点还是非常有用的。
  • 封session:后台对访问进行统计,如果单个session访问超过阈值,予以封锁。
    session即账号。这个看起来更高级了一些,但是其实效果更差,因为session完全不值钱,重新申请一个就可以了。
  • 封UA:后台对访问进行统计,如果单个UserAgent访问超过阈值,予以封锁。
    这个是大招,类似于抗生素之类的,效果出奇的好,但是杀伤力过大,误伤非常严重,使用的时候要非常小心。至今为止我们也就只短暂封杀过mac下的火狐。(因为爬虫通常使用火狐的UserAgent居多)

注意:组合起来能力变大,误伤率下降,在遇到低级爬虫的时候,还是比较好用的。

纯JAVASCRIPT反爬虫示例

  • 更改连接地址:让对方抓取到错误数据。这种方法简单,但是如果对方针对性的来查看,十分容易被发现。
  • 静态更改密钥:手工操作,做法简单,不易被发现。key即是密钥,通过有意爬取错误数据的方式来迷惑,实际数据已经下来用计算拿到。
  • 动态更改密钥:程序操作,做法简单,不易被发现,代价更低。将静态更改密钥的代码变为0
  • 复合更改密钥:让对方很难分析,如果加了浏览器检测,更难被爬取。

我抓到你了——该怎么办

  • 不会引发生产事件 —— 直接拦截
  • 可能引发生产事件 —— 给假数据(投毒)

注意:一旦发现,技术压制心理战放水……

一些想法

  • 越是低级的爬虫,越容易被封锁,但是性能好,成本低。越是高级的爬虫,越难被封锁,但是性能低,成本也越高。
  • 当成本高到一定程度,我们就可以无需再对爬虫进行封锁。因为考虑边际效应,应该寻找黄金点,该放则放,超过这个点,那就让它爬好了。毕竟我们反爬虫不是为了面子,而是为了商业因素。

更多内容参看: 关于反爬虫,看这一篇就够了 & 缓存图
关注一下技术:PhantomJS & Selenium