【问题标题】:How to set Robots.txt or Apache to allow crawlers only at certain hours?如何将 Robots.txt 或 Apache 设置为仅在特定时间允许爬虫?
【发布时间】:2011-06-11 10:48:45
【问题描述】:

由于流量在 24 小时内分布不均,我想在高峰时段禁止爬虫并在非繁忙时间允许它们。

有没有办法做到这一点?

编辑: 感谢所有的好建议。

这是我们找到的另一个解决方案。

2bits.com 有一篇关于设置 IPTables 防火墙以限制来自某些 IP 地址的连接数的文章。

the article

IPTables的设置:

  • 使用 connlimit

在较新的 Linux 内核中,有一个用于 iptables 的 connlimit 模块。可以这样使用:

iptables -I INPUT -p tcp -m connlimit --connlimit-above 5 -j REJECT

这会将来自每个 IP 地址的连接限制为不超过 5 个同时连接。这种“口粮”连接,并防止爬虫同时访问该站点。 *

【问题讨论】:

    标签: apache web-crawler robots.txt iptables


    【解决方案1】:

    您无法确定爬虫的工作时间,但是使用Crawl-delay 您可以降低它们请求页面的频率。这对于防止他们快速请求页面很有用。

    例如:

    User-agent: *
    Crawl-delay: 5
    

    【讨论】:

    • 谢谢,我知道那个。不幸的是,没有指令来规范爬虫的数量。上一轮,我们有 12 个爬虫同时访问该网站。
    • FWIW Google 不支持抓取延迟——那里指定了太多没有意义的虚假值。如果您想调整 Googlebot 的抓取速度,可以在 Google Webmaster Tools 中进行。
    • 令人沮丧的是,Google 不再尊重这一基于标准的指令:Googlebot 完全忽略 robots.txt 中设置的任何抓取延迟。
    【解决方案2】:

    您无法在 robots.txt 文件中控制它。一些爬虫可能支持类似的东西,但没有一个大的支持(据我所知)。

    在这种情况下,动态更改 robots.txt 文件也是一个坏主意。大多数爬虫会将 robots.txt 文件缓存一段时间,然后继续使用它,直到刷新缓存。如果他们在“正确”的时间缓存它,他们可能会正常爬行一整天。如果他们在“错误”的时间缓存它,他们将完全停止抓取(甚至可能从他们的索引中删除索引的 URL)。例如,Google 通常为caches the robots.txt file for a day,这意味着 Googlebot 看不到一天中的变化。

    如果抓取导致服务器负载过大,您有时可以调整各个抓取工具的抓取速度。例如,对于 Googlebot,您可以在 Google Webmaster Tools 中执行此操作。

    此外,当爬虫在高负载期间尝试爬取时,您始终可以只为它们提供503 HTTP result code。这告诉爬虫稍后再检查(如果你知道它们应该何时返回,你也可以指定一个 retry-after HTTP 标头)。虽然我会尽量避免在一天中严格执行此操作(这可能会阻止许多其他功能,例如站点地图、上下文广告或网站验证,并且通常会减慢抓取速度),但在特殊情况下它可能这样做是有意义的。从长远来看,我强烈建议您仅在您的服务器负载太高而无法成功将内容返回给爬虫时才这样做。

    【讨论】:

    • 503 可能确实是动态网站的前进方向。
    • 429 (Too Many Requests) 将是正确的响应代码,理想情况下返回一个 retry-after 标头 - 尽管 Google - 不可原谅 - 将其视为与 503 相同,我们可能希望更好的搜索引擎更符合标准。
    【解决方案3】:

    使用某些 robots.txt 语法是不可能的 - 功能 simply isn't there

    可能能够通过根据一天中的时间实际更改robots.txt 文件来影响爬虫。例如,我希望 Google 会在抓取之前立即检查文件。但显然,以这种方式将爬虫吓跑存在巨大的危险——这种风险可能比你现在得到的任何负载都更成问题。

    【讨论】:

      【解决方案4】:

      我认为您不能与搜索引擎蜘蛛预约。

      【讨论】:

      • 与其说是计划蜘蛛,不如说是允许他们在那个时候访问或不访问。蜘蛛总会回来的..
      【解决方案5】:

      先说清楚:

      块引用

      动态更改 robots.txt 文件在这种情况下也是一个坏主意。大多数爬虫会将 robots.txt 文件缓存一段时间,然后继续使用它,直到刷新缓存。如果他们在“正确”的时间缓存它,他们可能会正常爬行一整天。如果他们在“错误”的时间缓存它,他们将完全停止抓取(甚至可能从他们的索引中删除索引 URL)。例如,Google 通常会将 robots.txt 文件缓存一天,这意味着 Googlebot 看不到一天中的更改。 John Mueller 于 2011 年 1 月 22 日 14:25 回答

      我尝试在一周内重命名 robots.txt 文件。就像一个开/关开关。它工作说每周一在午夜将“robot.txt”重命名为“def-robot.txt”,现在它不会阻止爬虫。我允许两到三天,然后我有另一个计划 chron 作业将其重命名为 "robot.txt" 为 "def-robot.txt" 现在它开始阻止任何爬虫访问我的网站。所以他们要做到这一点还有很长的路要走,但第一个提到的正是发生在我身上的事情。

      如果不是全部,我的索引链接也有大幅减少,因为 GoogleBot 无法验证链接是否仍然正确,因为“robot.txt 半周内阻止 Google 访问我的网站。很简单。Chron 作业调度要更改您想要的自定义文件可以起到一些作用。这是我发现在预定时间基准上自定义robot.txt的唯一方法。

      【讨论】:

        【解决方案6】:

        我使用 cron 来修改 apache 配置文件。

        您可以在 httpd.conf 的 指令中添加一个包含文件(例如,包含 bot_block.conf),该文件具有蜘蛛过滤器。我没有在 .htaccess 中尝试过。

        我使用 setenvif 设置变量然后拒绝,这样您就可以选择 IP 地址或用户代理等...进行匹配。 例如。

        SetEnvIf Remote_Addr ^192.168.53.2$ timed_bot SetEnvIfNoCase 用户代理 "badbadbot.com" timed_bot 来自 env=timed_bot 的拒绝

        当您想要阻止蜘蛛和 然后优雅地重启apache

        当您想要允许蜘蛛时,使用 cron 作业用空白覆盖文件,然后优雅地重新启动 apache

        我已经实现了这个方法并且它有效。 它并不完美,因为当阻塞时间过去时,它不会停止已经有请求待处理的机器人。但它应该会在一段时间后让他们安静下来。

        【讨论】:

          猜你喜欢
          • 2012-04-29
          • 2010-12-10
          • 2018-06-07
          • 2012-08-31
          • 2014-09-18
          • 1970-01-01
          • 1970-01-01
          • 2012-01-07
          • 1970-01-01
          相关资源
          最近更新 更多