是否可以在一行中列出多个用户代理?

时间:2013-11-29 23:02:28

标签: user-agent robots.txt

robots.txt中是否可以向多个机器人发出一条指令而不必反复提及?

示例:

User-agent: googlebot yahoobot microsoftbot
Disallow: /boringstuff/

4 个答案:

答案 0 :(得分:10)

实际上很难给出明确的答案,因为robots.txt没有一个定义明确的标准,而且很多文档都含糊不清或相互矛盾。

description of the format understood by Google's bots非常全面,包括这个略显错误的句子:

  

直接跟在组后面的多组起始线将跟随最后一组起始线之后的组成员记录。

似乎正在摸索以下示例中显示的内容:

user-agent: e
user-agent: f
disallow: /g

根据下面的解释,这构成了一个“组”,不允许两个不同的用户代理使用相同的URL。

因此,您想要的正确语法(关于任何机器人与Google的工作方式相同)将是:

User-agent: googlebot
User-agent: yahoobot
User-agent: microsoftbot
Disallow: /boringstuff/

然而,正如Jim Mischel所指出的那样,robots.txt文件中没有任何意义,某些机器人会正确解释,但其他人可能会窒息,所以最好配合重复块的“最小公分母”,可能是通过简单的“配方”和更新脚本动态生成文件。

答案 1 :(得分:4)

我认为original robots.txt specification毫不含糊地定义了它:一行 User-agent行只能有一个值。

记录(也称为块,组)由组成。每个的格式为

  

<field>:<optionalspace><value><optionalspace>

User-agent字段。这是

  

此字段的值是记录描述访问策略的机器人的名称。

它是单数(“机器人的名字”),而不是复数(“机器人的名字”)。

  

机器人应该自由地解释这个领域。建议不带版本信息的名称不区分大小写的子串匹配。

如果允许多个值,解析器怎么可能是自由主义者呢?无论分隔字符是哪个(,;,...),它都可以是机器人名称的一部分。

  

记录以一个或多个用户代理行开头

如果可以在一行中提供多个值,为什么要使用多个User-agent行?

另外:

  • 规范没有定义分隔字符以在一行中提供多个值
  • 它没有为Disallow
  • 定义/允许它

所以而不是

User-agent: googlebot yahoobot microsoftbot
Disallow: /boringstuff/

你应该使用

User-agent: googlebot
User-agent: yahoobot
User-agent: microsoftbot
Disallow: /boringstuff/

或(可能更安全,因为您无法确定所有相关解析器是否支持为记录提供多条User-agent行的不常见方式)

User-agent: googlebot
Disallow: /boringstuff/

User-agent: yahoobot
Disallow: /boringstuff/

User-agent: microsoftbot
Disallow: /boringstuff/

(当然是User-agent: *

答案 2 :(得分:1)

根据original robots.txt exclusion protocol

  

用户代理

     

此字段的值是记录描述访问策略的机器人的名称。

     

如果存在多个User-agent字段,则该记录描述了针对多个robot的相同访问策略。每条记录至少需要有一个字段。

     

机器人应该自由地解释这个领域。建议不带版本信息的名称不区分大小写的子串匹配。

     

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

我从未见过在一行中列出多个机器人。而且我的网络抓取工具可能无法正确处理这样的事情。但根据上面的规范,它应该是合法的。

另请注意,即使Google支持单个指令中的多个用户代理,也不支持IMSoP回答中描述的多个用户代理(有趣的发现,顺便说一下......我不知道那个),不是所有其他爬虫都会。您需要决定是否要使用非常可能只有Google和Bing机器人支持的方便语法,或者使用所有礼貌机器人支持的更麻烦和更简单的语法。

答案 3 :(得分:0)

你必须将每个机器人放在另一条线上。

http://en.wikipedia.org/wiki/Robots_exclusion_standard