Robots.txt - 多个用户代理的抓取延迟的正确格式是什么?

时间:2013-06-29 07:28:37

标签: format web-crawler robots.txt agents

以下示例 robots.txt 文件允许多个用户代理,每个用户代理多次抓取延迟。抓取延迟值仅用于说明目的,在真实的robots.txt文件中会有所不同。

我在网上搜索了正确的答案,却找不到答案。有太多混合的建议,我不知道哪个是正确/正确的方法。

问题:

(1)每个用户代理都可以拥有自己的抓取延迟吗? (我假设是)

(2)在Allow / Dissallow行之前或之后,您在哪里为每个用户代理放置了爬行延迟行?

(3)每个用户代理组之间是否必须有空白。

参考文献:

http://www.seopt.com/2013/01/robots-text-file/

http://help.yandex.com/webmaster/?id=1113851#1113858

基本上,我希望了解最终的robots.txt文件应该如何使用下面示例中的值。

提前致谢。

# Allow only major search spiders    
User-agent: Mediapartners-Google
Disallow:
Crawl-delay: 11

User-agent: Googlebot
Disallow:
Crawl-delay: 12

User-agent: Adsbot-Google
Disallow:
Crawl-delay: 13

User-agent: Googlebot-Image
Disallow:
Crawl-delay: 14

User-agent: Googlebot-Mobile
Disallow:
Crawl-delay: 15

User-agent: MSNBot
Disallow:
Crawl-delay: 16

User-agent: bingbot
Disallow:
Crawl-delay: 17

User-agent: Slurp
Disallow:
Crawl-delay: 18

User-agent: Yahoo! Slurp
Disallow:
Crawl-delay: 19

# Block all other spiders
User-agent: *
Disallow: /

# Block Directories for all spiders
User-agent: *
Disallow: /ads/
Disallow: /cgi-bin/
Disallow: /scripts/

(4)如果我想将所有用户代理设置为10秒的爬网延迟,那么以下内容是否正确?

# Allow only major search spiders
User-agent: *
Crawl-delay: 10

User-agent: Mediapartners-Google
Disallow:

User-agent: Googlebot
Disallow:

User-agent: Adsbot-Google
Disallow:

User-agent: Googlebot-Image
Disallow:

User-agent: Googlebot-Mobile
Disallow:

User-agent: MSNBot
Disallow:

User-agent: bingbot
Disallow:

User-agent: Slurp
Disallow:

User-agent: Yahoo! Slurp
Disallow:

# Block all other spiders
User-agent: *
Disallow: /

# Block Directories for all spiders
User-agent: *
Disallow: /ads/
Disallow: /cgi-bin/
Disallow: /scripts/

1 个答案:

答案 0 :(得分:21)

  

(1)每个用户代理都可以拥有自己的抓取延迟吗?

是。由一个或多个User-agent行启动的每个记录可以有Crawl-delay行。请注意,Crawl-delay不属于original robots.txt specification。但是将它们包含在那些理解它的解析器中是没有问题的,因为规范defines

  

忽略无法识别的标头。

如此老的robots.txt解析器会忽略您的Crawl-delay行。


  

(2)在Allow / Dissallow行之前或之后,您在哪里为每个用户代理放置了爬行延迟行?

没关系。


  

(3)每个用户代理组之间是否必须有空白。

是。 记录必须由一个或多个新行分隔。请参阅original spec

  

该文件由一个或多个由一个或多个空行分隔的记录组成(以CR,CR / NL或NL终止)。


  

(4)如果我想将所有用户代理设置为10秒的爬网延迟,那么以下内容是否正确?

没有。机器人查找与其用户代理匹配的记录。只有当他们找不到记录时,他们才会使用User-agent: *记录。因此,在您的示例中,所有列出的机器人(例如GooglebotMSNBotYahoo! Slurp等)都将 Crawl-delay


另请注意,您不能拥有several records with User-agent: *

  

如果值为“*”,则记录描述任何未匹配任何其他记录的机器人的默认访问策略。 不允许在“/robots.txt”文件中包含多个此类记录。

因此解析器可能会查找(如果没有其他记录匹配)第一条记录User-agent: *,并忽略以下记录。对于您的第一个示例,这意味着以/ads//cgi-bin//scripts/开头的网址未被阻止。

即使您只有User-agent: *一个记录,这些Disallow行也只适用于没有其他记录匹配的机器人!正如您的评论# Block Directories for all spiders所示,您希望为所有蜘蛛阻止这些网址路径,因此您必须为每个重复Disallow记录。