5

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

有没有办法做到这一点?

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

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

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

文章

IPTables的设置:

  • 使用 connlimit

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

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

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

4

6 回答 6

6

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

例如:

User-agent: *
Crawl-delay: 5
于 2011-01-19T00:01:32.987 回答
3

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

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

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

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

于 2011-01-22T14:25:14.277 回答
2

使用某些 robots.txt 语法这是不可能的 - 该功能根本不存在

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

于 2011-01-18T23:54:13.673 回答
0

我不认为你可以与搜索引擎蜘蛛预约。

于 2011-01-18T23:55:27.023 回答
0

首先要清楚:

块引用

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

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

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

于 2016-01-27T12:41:56.927 回答
0

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

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

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

SetEnvIf Remote_Addr ^192.168.53.2$ timed_bot SetEnvIfNoCase User-Agent "badbadbot.com" timed_bot Deny from env=timed_bot

使用 cron 作业在您想要阻止蜘蛛时将过滤器复制到文件中,然后优雅地重新启动 apache

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

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

于 2021-04-17T23:10:19.123 回答