robots.txt中的User-Agent行是完全匹配还是子字符串匹配?

时间:2013-08-02 21:42:16

标签: web-crawler user-agent robots.txt

当抓取工具读取robots.txt文件的User-Agent行时,它是否尝试将其与其自己的User-Agent完全匹配,还是尝试将其作为其User-Agent的子字符串进行匹配?

我读过的所有内容都没有明确回答这个问题。根据{{​​3}},它完全匹配。

然而,another StackOverflow thread让我相信它是一个子串匹配。例如,User-Agent: Google将匹配“Googlebot”和“Googlebot-News”。以下是RFC的相关引文:

  

机器人必须遵守/robots.txt中包含User-Agent行的第一条记录,该行的值包含机器人的名称标记作为子字符串。

此外,在RFC draft的“用户代理优先顺序”部分中,它解释了Google图片“Googlebot-Image/1.0”的用户代理与User-Agent: googlebot匹配。

我很欣赏这里的清晰度,答案可能比我的问题更复杂。例如,Eugene Kalinin的节点机器人模块提到拆分User-Agent以获取Googlebot's documentation上的“名称标记”并与之匹配。如果是这样,那么line 29Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)”将与User-Agent: Googlebot不匹配。

2 个答案:

答案 0 :(得分:3)

每个机器人都会以不同的方式做到这一点。实际上没有一种可靠的方法可以将robots.txt中的用户代理映射到请求标头中发送的用户代理。最安全的做法是将它们视为两个独立的任意字符串。 找到robots.txt用户代理的唯一100%可靠方法是阅读给定机器人的官方文档。

修改

您最好的选择是阅读给定机器人的官方文档,但即使这样也不是100%准确。正如Michael Marr指出的那样,Google有一个robots.txt测试工具,可以用来验证哪个UA可以与给定的机器人一起工作。此工具显示其文档不准确。具体来说,页面https://developers.google.com/webmasters/control-crawl-index/docs/声称他们的媒体合作伙伴机器人对“Googlebot”UA做出回应,但该工具显示他们没有。

答案 1 :(得分:3)

original robots.txt specification (from 1994)中,它说:

  

用户代理

     

[...]

     

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

     

[...]

如果和哪些机器人/解析器符合这个是另一个问题,一般无法回答。