当抓取工具读取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 29“Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
”将与User-Agent: Googlebot
不匹配。
答案 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)中,它说:
用户代理
[...]
机器人应该自由地解释这个领域。建议不带版本信息的名称不区分大小写的子串匹配。
[...]
如果和哪些机器人/解析器符合这个是另一个问题,一般无法回答。