Single

如何屏蔽爬虫yisouspider一搜蜘蛛访问站点

今天无意间发现我的两个站点访问速度都非常缓慢,登录阿里云后台看了 ECS 服务器才发现 CUP 的使用率经常达到 99-100%,看了日志才发现 yisouspider(一搜蜘蛛,现在应该是属于神马的)蜘蛛正在疯狂爬行,就算是我在 robots.txt 设置了禁止爬行的路径也被爬行了。如果是凌晨爬行就不说了,竟然是在大白天疯狂爬行,分分钟可以搞瘫我们的站点,度娘一下发现有很多人都在吐槽这个 yisouspider,最终的解决方案就是直接禁止 yisouspider 的爬行和访问。

yisouspider 爬行 robots 文件禁止的路径

robots.txt 是搜索引擎访问网站时要访问的第一个文件,以确定哪些网页是允许或禁止抓取的。yisouspider遵守robots.txt协议。如您希望完全禁止神马访问或对部分目录禁止访问,您可以通过 robots.txt 文件来设置内容,限定 yisouspider 的访问权限。

如果您开通了 CNZZ 云推荐服务,协议中默认支持 yisouspider 抓取,会忽略 robots.tx 文件协议的限制。

robots.txt 必须放在网站根目录下,且文件名要小写。

具体写法:

1) 完全禁止 yisouspider 抓取:

  1. User-agent: yisouspider
  2. Disallow: /

2) 禁止 yisouspider 抓取指定目录

  1. User-agent: yisouspider
  2. Disallow: /update
  3. Disallow: /history

禁止抓取 update、history 目录下网页

疑问

我们平时写 robots 协议的时候都是直接写 User-agent: *,跟神马搜索给出的 User-agent: yisouspider 有点不一样,不知道是不是这个问题导致我们的 robots 协议对 yisouspider 毫无作用。

不过我也懒得折腾这个针对 yisouspider 的 robots 协议,我还是直接在 nginx 里面禁止 yisouspider 来得更有效果。

进入到 nginx 安装目录下的 conf 目录,将如下代码保存为 agent_deny.conf

  1. #禁止 Scrapy 等工具的抓取
  2. if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
  3.      return 403;
  4. }
  5. #禁止指定 UA 及 UA 为空的访问
  6. if ($http_user_agent ~ “yisouspider|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$” ) {
  7.      return 403;
  8. }
  9. #禁止非 GET|HEAD|POST 方式的抓取
  10. if ($request_method !~ ^(GET|HEAD|POST)$) {
  11.     return 403;
  12. }

然后,在网站相关配置中的

  1. location / {
  2.         try_files $uri $uri/ /index.php?$args;

下方插入如下代码:

  1. include agent_deny.conf;

保存后,执行如下命令,平滑重启 nginx 即可:

  1. /usr/local/nginx/sbin/nginx -s reload

懿古今和 boke112 导航站点就是使用这个方法成功屏蔽爬虫 yisouspider 访问。设置好之后,我的 ECS 服务器 CPU 的使用率立马就降下来了。

根据百度统计给出的数据,我的站点来自神马搜索的不多,所以权衡之下只能禁止 yisouspider 蜘蛛爬行了,要不然我的站点经常被它搞瘫了就得不偿失了。如果你的服务器比较给力,不会被搞瘫的话,就没必要禁止它了。

PS:请允许我用小心之心揣测,以前使用阿里云免费虚拟主机每个月都会出现资源耗尽,最大的问题很有可能就会被 yisouspider 蜘蛛爬行导致的。

1、通过修改 .htaccess 文件

修改网站目录下的.htaccess,添加如下代码即可(2 种代码任选):

可用代码 (1):

  1. RewriteEngine On
  2. RewriteCond %{HTTP_USER_AGENT} (^$|yisouspider|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) [NC]
  3. RewriteRule ^(.*)$ – [F]

可用代码 (2):

  1. SetEnvIfNoCase ^User-Agent$ .*(yisouspider|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms) BADBOT
  2. Order Allow,Deny
  3. Allow from all
  4. Deny from env=BADBOT

2、通过修改 httpd.conf 配置文件

找到如下类似位置,根据以下代码 新增 / 修改,然后重启 Apache 即可:

  1. DocumentRoot /home/wwwroot/xxx
  2. <directory “/home/wwwroot/xxx”></directory 
  3. SetEnvIfNoCase User-Agent “.*(yisouspider|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms)” BADBOT
  4.         Order allow,deny
  5.         Allow from all
  6.        deny from env=BADBOT

将如下方法放到贴到网站入口文件 index.php 中的第一个 <?php 之后即可:

  1. //获取 UA 信息
  2. $ua = $_SERVER[‘HTTP_USER_AGENT’];
  3. //将恶意 USER_AGENT 存入数组
  4. $now_ua = array(‘yisouspider’,’FeedDemon ‘,’BOT/0.1 (BOT for JCE)’,’CrawlDaddy ‘,’Java’,’Feedly’,’UniversalFeedParser’,’ApacheBench’,’Swiftbot’,’ZmEu’,’Indy Library’,’oBot’,’jaunty’,’YandexBot’,’AhrefsBot’,’MJ12bot’,’WinHttp’,’EasouSpider’,’HttpClient’,’Microsoft URL Control’,’YYSpider’,’jaunty’,’Python-urllib’,’lightDeckReports Bot’);
  5. //禁止空 USER_AGENT,dedecms 等主流采集程序都是空 USER_AGENT,部分 sql 注入工具也是空 USER_AGENT
  6. if(!$ua) {
  7.     header(“Content-type: text/html; charset=utf-8”);
  8.     die(‘请勿采集本站,因为采集的站长木有小 JJ!’);
  9. }else{
  10.     foreach($now_ua as $value )
  11. //判断是否是数组中存在的 UA
  12.     if(eregi($value,$ua)) {
  13.         header(“Content-type: text/html; charset=utf-8”);
  14.         die(‘请勿采集本站,因为采集的站长木有小 JJ!’);
  15.     }
  16. }
温馨提示

本文三种方法及代码均来自张戈博主分享的《》。对于 Apache 和 PHP 代码屏蔽 yisouspider 的办法懿古今没有亲自测试,本站只采用了 Nginx 屏蔽 yisouspider 的办法,所以如果采用其他方法遇到问题的请前往张戈博客留言求助。

下面是网络上常见的垃圾 UA 列表,仅供参考,同时也欢迎你来补充。

  1. yisouspider              一搜蜘蛛
  2. FeedDemon             内容采集
  3. BOT/0.1 (BOT for JCE) sql 注入
  4. CrawlDaddy            sql 注入
  5. Java                  内容采集
  6. Jullo                 内容采集
  7. Feedly                内容采集
  8. UniversalFeedParser   内容采集
  9. ApacheBench           cc 攻击器
  10. Swiftbot              无用爬虫
  11. YandexBot             无用爬虫
  12. AhrefsBot             无用爬虫
  13. YisouSpider           无用爬虫(已被 UC 神马搜索收购,此蜘蛛可以放开!)
  14. MJ12bot               无用爬虫
  15. ZmEu phpmyadmin       漏洞扫描
  16. WinHttp               采集 cc 攻击
  17. EasouSpider           无用爬虫
  18. HttpClient            tcp 攻击
  19. Microsoft URL Control 扫描
  20. YYSpider              无用爬虫
  21. jaunty                wordpress 爆破扫描器
  22. oBot                  无用爬虫
  23. Python-urllib         内容采集
  24. Indy Library          扫描
  25. FlightDeckReports Bot 无用爬虫
  26. Linguee Bot           无用爬虫