网站如何屏蔽垃圾蜘蛛爬取?

温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

网站一般欢迎蜘蛛访问,因为蜘蛛意味着搜索排名和流量,但有时候,大量垃圾蜘蛛甚至爬虫访问很影响性能,特别是服务器配置不高的情况下,那么我们该怎样屏蔽掉垃圾蜘蛛呢?

一般来说,屏蔽蜘蛛的爬取有三种方法:

  • Robots 禁封
  • UA 禁封
  • IP 禁封

一、Robots 禁封

Robots 协议(也称为爬虫协议、机器人协议等)的全称是 “网络爬虫排除标准”(Robots Exclusion Protocol),用来告诉搜索引擎、爬虫哪些页面可以抓取,哪些页面不能抓取。

Robots 协议在网站中体现在根目录下的 robots.txt 文件,一般格式入下:

User-agent: YisouSpider
Disallow: /
User-agent: EasouSpider
Disallow: /
User-agent: *
Disallow: /admin/

正规 Robot 在爬取网站前都会先读取该文件,根据 robots.txt 指示爬取:

ROBOTS.TXT.png

但是由于 Robots 协议并不是一个规范,而是约定俗成的,所以只能引导正规蜘蛛爬取,并不能阻止垃圾蜘蛛,因此要屏蔽流氓垃圾蜘蛛还需要其他更严格的措施来配合。

二、UA 禁封

UA(User Agent)中文名为用户代理,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等,大多数蜘蛛都有携带此信息,如谷歌 Chrome 浏览器 Windows 版本 UA 是:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36

针对指定 UA 的访问,返回预先设定好的异常页面(如 403,500)或跳转到其他页面的情况,即为 UA 禁封。

Nginx 下,可以单独创建一个配置文件,如 deny-robots.conf,并将文件添加到 nginx.conf 或网站配置中,然后重新加载 Nginx 即可。

例如 deny-robots.conf 在 /etc/nginx/conf/ 文件夹下,deny-robots.conf 内容:

if ($http_user_agent ~ "InetURL|Pcore-HTTP|PocketParser|Wotbox|SEMrushBot|newspaper|DnyzBot|Mechanize|redback|ips-agent|Sogou Pic Spider|python-requests|PiplBot|SMTBot|WinHTTP|Auto Spider 1.0|GrabNet|TurnitinBot|Go-Ahead-Got-It|Download Demon|Go!Zilla|GetWeb!|GetRight|libwww-perl|Cliqzbot|MailChimp|SMTBot|Dataprovider|XoviBot|linkdexbot|feedreader|SeznamBot|Qwantify|spbot|evc-batch|zgrab|Go-http-client|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$")
  {
  return 444;
  }

则在网站配置中添加:

server {
......
include deny-robots.conf
......
}

然后,service nginx reload 即可生效,Apache 等其他软件操作类似。

解释一下,这个配置的意思是 判断访问者 UA 是否包含引号中的字符串,若为真,则返回错误码 444,其中错误码 444 是 nginx 独有的错误码,表示服务器不返回任何数据,直接丢弃。

RESPONSE.EMPTY.png

根据访问日志,我也整理了一份清单上传到 GitHub,链接:vircloud/bots,可以作为参考。

由于 UA 禁封是由 Nginx 或 Apache 等已经到应用层才处理,因此即使已经禁止爬取访问,蜘蛛仍然会先与服务器创建连接,浪费资源,为此,针对特别流氓的蜘蛛,可以通过防火墙在底层拒绝连接。

三、IP 禁封

IP 禁封是指利用系统自带防火墙,拒绝蜘蛛 IP 连接,此措施最为严格,且针对有特定 IP 蜘蛛,如果 IP 是随机变动的, IP 禁封意义也不大。

举例, 有 UA 为 ”WF search/Nutch-1.12“ 的蜘蛛,通过 IP 183.94.118.76 与服务器产生大量连接访问,影响到正常运行,则通过以下命令禁止连接(CentOS7):

FIREWALLD.DENY.png

生效后此 IP 将无法再与服务器产生连接:

FIREWALLD.DENY.2.png

同样的,我也整理了一份清单上传到 GitHub,链接:vircloud/ips,可以作为参考。

当然了,思想有多远,就有多少方法去屏蔽垃圾蜘蛛爬取,并不局限于上述三个方法,大家都可以去试试。


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 屏蔽网络蜘蛛网站 的文章

 本文最后更新于 2019/05/16 11:43:48,可能因经年累月而与现状有所差异

 引用转载请注明: VirCloud's Blog > 运维 > 网站如何屏蔽垃圾蜘蛛爬取?

精选评论

  1. grimmster
    grimmster 回复

    Windows 7Chrome 86.0.4240.198来自 陕西 的大神

    include写在ngnix.conf文件的server区域就可以了吧

    1. 欧文斯
      1. grimmster
        grimmster 回复

        Windows 7Chrome 86.0.4240.198来自 陕西 的大神

        谢谢。有个问题顺便想问下,就是我linux服务器用的宝塔面板,panels/logs目录下有个request文件夹,我不想让这个request文件夹写入,修改了权限还是不行,然后我想用同名文件替换,于是停止了宝塔面板服务,用rm -rf删除request文件夹,但是文件夹删了后立即重新生成,这是咋回事,有什么办法不让这个文件夹写入文件或者删除掉它?

        1. 欧文斯

          这个应该是宝塔日志目录吧,运行的时候会检测目录有没有,不存在就创建,所以你的两个方法都不行。确实不想生成日志,可以找找服务器配置,日志是在哪里指定的,把它注释掉就好了。

          1. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            我知道咋回事了。停用宝塔面板后,rm -rf可以删除,删除后不会立即重新生成,是创建同名文件时没操作好,是linux系统,要输入些内容保存,一开始不熟悉linux,没输入内容保存文件,所以同名文件创建不成功。

          2. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            对了,博主,有个情况想问下。我用百分浏览器访问你的网站的时候会弹出一个要求用户名和密码的登录对话框,对话框顶部是你的网站首页地址。这是咋回事?比如我在首页,点击“关于”后就会出来这个对话框。

          3. 欧文斯

            应该是浏览器问题,我测试了 Chrome、Firefox、Safari、IE 等等浏览器都没复现。

          4. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            恩,我chrome上也没有

          5. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            恩,我试了chrome,没问题。我清理了cookie和缓存后好了,奇怪,以前还真没遇见过这个问题。

          6. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            应该是百分浏览器的问题,回头换个便携版试试。

          7. 欧文斯
          8. 欧文斯
          9. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            我发现是发布评论后出现的,然后清理cookie就好了,确实怪。

          10. grimmster
            grimmster 回复

            Windows 7Chrome 84.0.4147.105来自 陕西 的大神

            发布完评论后出现的这个问题,清理author和mail的cookie就好了。在别的网站也没出现过,真是个怪现象。

          11. grimmster
            grimmster 回复

            Windows 7Chrome 86.0.4240.198来自 陕西 的大神

            我就用的chrome和cent这两个浏览器,发布完评论就出现这个情况,清理相关cookie就好。估计是chrome版本的原因,哈哈。

          12. 欧文斯

            我看看,估计是主题问题

          13. 欧文斯

            我再测试了还是没有复现这个问题,我用的是最新版的 Chrome 和 Forefox

  2. test
    test 回复

    Windows 10Chrome 86.0.4240.198来自 海南 的大神

    vircloud/ips 好久没更新了,来催更了。
    河南郑州那边的多边IP爬虫又多了起来,旧的没封住。

    1. 欧文斯
    2. 欧文斯
      1. test
        test 回复

        Windows 10Chrome 86.0.4240.198来自 海南 的大神

        https://s3.bmp.ovh/imgs/2022/03/04c2de5cd73d8b87.jpg
        这些taiwan的IP老多了,不知道是干什么的,封都封不完,也查不到是什么爬虫。你的封禁IP列表貌似没有这些

        1. 欧文斯

          IP 是封不完的,只能是不断更新。我的列表是经过筛选,至少异常访问五次以上才加进来。东北大学也有一个清单,可以考虑也加进来。http://antivirus.neu.edu.cn/scan/ssh.php

  3. 提莫酱
    提莫酱 回复

    Windows 10Chrome 100.0.4844.51来自 河南 的大神

    欸嘿,识别出爬虫不返回任何东西,连状态码都不给,这样对爬虫才能有效遏制 icon_mrgreen.gif

    1. 欧文斯

      状态码 444 就是不返回任何东西

      1. 提莫酱
        提莫酱 回复

        Windows 10Chrome 100.0.4844.51来自 河南 的大神

        444关闭连接会让爬虫得到信息,如果就是阻塞这个请求,不给任何返回,状态码都不给。让爬虫慢慢爬去

        1. 欧文斯

          这个可能新版 Nginx 可以实现

  4. test
    test 回复

    Windows 10Chrome 86.0.4240.198来自 火星 的大神

    忽然发现360蜘蛛被无法访问我的网站,经过检查,360蜘蛛ua有这个【Center】,导致误封。