我运行了相当大规模的Web搜寻器。我们会努力在公认的社区标准内操作爬虫,其中包括尊重robots.txt。我们对爬虫的投诉很少,但大多数情况下都是关于robots.txt的处理。网站管理员通常会在他的robots.txt文件中犯一个错误,我们很乐意指出错误。但是,我们将定期碰上涉及的处理灰色地带Allow和Disallow。
该robots.txt的页面没有覆盖Allow。我看过其他页面,其中一些说爬虫使用“第一个匹配”规则,而另一些没有指定。这导致一些混乱。例如,Google关于robots.txt的页面曾经有以下示例:
User-agent: Googlebot
Disallow: /folder1/
Allow: /folder1/myfile.html
显然,这里的“第一个匹配”规则不起作用,因为搜寻器会看到Disallow和消失,而不会搜寻明确允许的文件。
如果我们忽略所有Allow行,我们就一清二楚了,但是我们可能不会对我们允许进行爬网的内容进行爬网。我们会错过的事情。
Allow首先检查Disallow,然后再进行检查,我们已经取得了巨大的成功,其Allow目的是要比更加具体Disallow。这是因为,默认情况下(即在没有相反说明的情况下),允许所有访问。但是然后我们遇到了这样的事情:
User-agent: *
Disallow: /norobots/
Allow: /
这里的意图很明显,但是这Allow: /将导致一个机器人进行检查Allow,认为它可以爬网该网站上的任何内容。
在这种情况下,即使可以解决。我们可以将匹配项Allow与匹配项进行比较,Disallow并确定不允许我们在/ norobots /中抓取任何内容。但这在通配符的情况下无法解决:
User-agent: *
Disallow: /norobots/
Allow: /*.html$
那么问题是,机器人可以爬网/norobots/index.html吗?
“首次匹配”规则消除了所有歧义,但是我经常看到网站显示类似旧的Google示例的内容,而在Allow 后面放置了更具体的内容Disallow。该语法需要机器人进行更多处理,并导致无法解决的歧义。
那么,我的问题是做事情的正确方法是什么?当涉及到robots.txt处理时,网站管理员对行为良好的bot有何期待?