背景介绍
很多IT教程类的博客都不是原创内容,都是爬虫采集csdn、cnblogs等各类站点的内容放到自己网站上,忽悠搜索引擎收录,从而骗取一些流量。
coderbbb上线之后,很多内容会同步到csdn或cnblogs上,于是就被很多盗版爬虫盯上了,可谓爬虫的量比真实访客还多。于是在接下来的一年中,我们和各类盗版爬虫展开了持久战。本文就是分享本站的反爬虫之路。
反爬虫真正的难点其实是识别爬虫。
低端的爬虫可能会用相同的IP、浏览器UserAgent等信息疯狂抓取网站内容,这样的爬虫很容易屏蔽,只要针对同一个IP做好限流即可。发现爬虫IP就封杀。但是,现在大部分爬虫都是各种高匿代理IP+selenium自动化浏览器等技术组合模拟真实用户,这导致识别爬虫变得越来越难(可以理解为成本越来越高)。本站最初的策略就是想尽一切办法去区分正常用户和非法爬虫,但是经过一段时间实验后发现,这样的策略是“道高一尺魔高一丈”,发爬虫成本越来越高。这迫使我们回到最初的原点来思考反爬虫这件事。
coderbbb是一个IT教程类网站,我们反爬虫的目的是不让原创内容被盗版网站恶意抓取。既然识别爬虫的难度越来越高,那干脆就不识别爬虫了,不管是用户还是爬虫,我们网站返回的内容都从文字变成了图片,只有在搜索引擎爬虫访问的时候,才会返回文字内容(避免SEO出现问题)。最后,只要定期更新图片地址,即可让盗版网站抓取的图片失效,从而达到反盗版爬虫的目的。用户如果需要复制内容,可以选择登录或者进行一些验证(比如拖动图片、输入验证码等)
常见反爬虫策略
本站使用图片发爬虫虽然一劳永逸的解决了盗版爬虫的问题,但是在之前和盗版爬虫斗智斗勇的过程中,还是尝试使用了很多其他技术来反爬虫。这些技术也许对其他网站有所帮助,可以借鉴。
- 针对非搜索引擎的IP限流。众所周知,大部分普通用户的访问频率其实很低,所以我们可以通过IP限流的方式,识别出短时间大量访问网站的IP封杀掉。
- 通过JS封杀非浏览器访问。众所周知,大部分低端爬虫是通过HTTP请求直接抓取HTML,并不会运行其中的Javascript代码的。这样的话,我们可以通过判断JS代码是否运行来把一部分低端爬虫封杀掉。
- 对于使用selenium等自动化浏览器框架的爬虫,可以通过识别这些网络框架的HTTP请求特征指纹来屏蔽。原理是这些开源的框架发起网络请求的二进制数据,其实是有一定的特征的。如果你自己手写http server,你就能发现,并屏蔽。
看到这里,是不是觉得成本越来越高了?所以,常规意义上的反爬虫,其实成本是越来越高的,可谓“道高一尺魔高一丈”。所以最终的反爬虫方案,还是要根据自身网站的特点来定制反爬虫策略。
如何避免被爬虫盯上
最安全的反爬虫方式,不是通过技术反爬虫,而是降维打击——从开始就不让爬虫找到你。你会发现公网上有很多机器人爬虫在不停的扫描常见的开源建站程序,比如WordPress等。一旦发现,就会出现攻击、爬虫等等各类非法攻击操作。所以,如果你能够让你的网站隐藏这些“暴露身份”的特征,其实你已经成功了一半了。毕竟没有多少网站的价值是值得黑产人员定制代码攻击的。以下是一些隐藏自己的手段:
- 尽量不要使用开源程序建站。目标太大,漏洞太多。不是说代码不好,而是盯着的人太多了。
- 如果你最后不得不用了开源的建站系统,那么请多研究一下代码,把里面的文件、路径等等改个名字。大部分机器人扫描的时候,都是通过检测某些路径、文件是否存在来识别的。