简单的反爬虫手段

恶意的爬虫会抓取服务器资源,甚至阻塞正常的访问,这里简述了几个反爬虫的常用技术点。

显示器背后,到底是机器还是人?

人类不再是互联网“主导” 52%网络流量来自机器人,活跃在网络上的有很大一部分是各种机器人而非真实的人。这些机器人通常都来自各类搜索引擎的爬虫,甚至有很多恶意机器人,会模仿人的操作发起DDOS攻击。如果服务器未做任何处理,在分析日志时,很可能会发现了大量spider访问的痕迹,量比较多的有:MJ12bot,Baiduspider,Baiduspider-image,Googlebot,JikeSpider,bingbot,YisouSpider等。其中,对于MJ12bot爬虫,发现它在短时间内频繁抓取网站内容,对于一些小带宽和内存的服务器来说,可能造成服务受影响。

限制那些用处不大的爬虫

各种爬虫非常多,对我们有用的就是常见的那几个:Baiduspider,Googlebot等。用处不大的爬虫可以限制他们访问。在网站的robots.txt文件做如下配置:

User-agent: Googlebot
Disallow:

User-agent: Baiduspider
Disallow:

User-agent: *
Disallow: /

防君子不防小人

需要注意的是:Robots是网络爬虫排除标准,基于以下原则建立:

  • 搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;
  • 网站有义务保护其使用者的个人信息和隐私不被侵犯。

Robots协议只是道德规范,不能保证机器人一定遵守Robots协议。那么,一种更有效的方式是限制user-agent内容。apache服务器可在网站根目录的.htaccess文件,新增:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MJ12bot [NC]
RewriteRule .* - [F]

user-agent也不靠谱

实际上spider已经有很多手段修改user-agent来绕过user-agent的校验,那么单纯的检查user-agent也就失去意义了。这就要求更加有效的反爬虫技术,比如基于IP的限制策略:

很容易的识别出一个ip在很短的时间内执行了大量请求(相同请求)等异常行为。

实际上apache中的mod-evasive模块就是干这个事情的,可以配置同一个IP在指定时间内访问一个url或全站url的数量,超过阈值则拒绝访问。这种方法可以解决一些问题,但对于ip代理的爬虫就无能为力了。

以上只是简述了非常简单的反爬虫手段,实际上反爬虫是很专业和细致的工作,高级一点可以使用验证码,javascript渲染,甚至基于用户行为分析等。技术不断演进,对抗也在升级。

其它文章

Let’s Encrypt acme.sh 泛域名证书
utf8mb4:MYSQL中使用Emoji