5

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

我读过的所有内容都没有明确回答这个问题。根据另一个 StackOverflow 线程,它是完全匹配的。

然而,RFC 草案让我相信它是一个子字符串匹配。例如,User-Agent: Google将匹配“Googlebot”和“Googlebot-News”。以下是 RFC 的相关引用:

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

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

我将不胜感激,答案可能比我的问题更复杂。例如,Eugene Kalinin 的节点机器人模块提到在第 29 行拆分用户代理以获取“名称令牌”并与之匹配。如果这是真的,那么Googlebot 的 User-Agent " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 将不匹配User-Agent: Googlebot

4

2 回答 2

5

最初的 robots.txt 规范(从 1994 年开始)中,它说:

用户代理

[…]

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

[…]

如果以及哪些机器人/解析器遵守这是另一个问题,一般无法回答。

于 2013-08-05T11:14:47.647 回答
3

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

编辑:

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

于 2013-08-02T23:31:33.037 回答