形如大多SE一样,在bot搜寻过程中会检查网站robots.txt 文件,以便是否设置了针对自己的rules。
一.robots.txt常识
由于robots.txt是一个协议而不是规范,所以不同的SE会有自己的实际处理规则。nutch也一样。
看看它是怎样书写的:
User-agent: unhipbot
Disallow: /
User-agent: webcrawler
User-agent: excite
Disallow:
User-agent: *
Disallow: /org/plans.html #一般情况下,开头相同的url,较长的优先级较高
Allow: /org/ #优先级较低
Allow: /serv
Allow: /~mak
常规情况下的解析:
unhipbot不允许访问此站下的所有url;but
webcrawler&excite可以访问所有urls;but
所有其它的robot不可以访问plans.html但可以访问/org/,/serv,/~mark开头的urls
注意user-agent为*时的情况,这是所有其它 user-agent的通配符表示,当没有其它过其它user-agent时,它是作用于所有bots,但这里明显作用了除unhibot,webcrawler,excite外的bots,因为如果将unhibot也归入*的话,那么就会有矛盾,如:
unhibot定义了全額拒绝访问,但在*下又定义了几个Allow,这样在前后不一致了。
另外,不同的bots也有支持rules不同的情况,有些支持正则。
rule后有没有'/'是完全不同的;
二.nutch处理robots.txt的特点:
nutch内部维护了一个http.robots.agents属性,此属性可以定义多个bot name,并以优先级递降的顺序排列。
1.不支持rules有通配符,只支持Url字串的正向匹配。如果需要这点可以自己修改即可;
2.支持Allow和Crawl-Delay;
3.nutch允许定义多个bot name,但如果robots.txt中有多个匹配时,只会取出第一个bot name的rules,其它忽略。这就是为什么nutch中强烈建议将http.agent.name放在agents的前面的原故;
4.如果不存在robots.txt或Disallow/Allow的值为空时,表明整站是crawlable;
5.不考虑url长短的优先级
references:
ntuch#RobotRulesParser.java