如何设置Robots.txt或Apache只在特定时间允许抓取工具?

Joe*_*Box 5 apache robots.txt iptables web-crawler

由于交通在24小时内分布不均匀,我想在偷看期间禁止爬行者,并允许他们在非繁忙时段.

有没有办法实现这个目标?

编辑:感谢所有好建议.

这是我们发现的另一种解决方案

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

这篇文章

IPTables的设置:

  • 使用connlimit

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

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

这会将每个IP地址的连接限制为不超过5个同时连接.这种"口粮"连接,并防止爬虫同时点击该网站.*

Unk*_*ech 6

您无法确定抓取工具的工作时间,但Crawl-delay您可以降低他们请求网页的频率.这可以用于防止它们快速请求页面.

例如:

User-agent: *
Crawl-delay: 5
Run Code Online (Sandbox Code Playgroud)

  • FWIW Google不支持抓取延迟 - 那里指定的虚假值太多没有意义.如果您要调整Googlebot的抓取速度,可以在[Google网站站长工具](http://www.google.com/support/webmasters/bin/answer.py?hl=zh-CN&answer=48620)中执行此操作. (2认同)

Joh*_*ler 3

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

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

如果爬网对您的服务器造成过多负载,您有时可以调整各个爬网程序的爬网速率。例如,对于 Googlebot,您可以在Google 网站管理员工具中执行此操作。

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