Nutch1.7学习笔记7:Robots协议处理流程

原创 2013年12月01日 20:35:38

Nutch1.7学习笔记7:Robots协议处理流程

作者:雨水,时间:2013-12-1博客地址:http://blog.csdn.net/gobitan

说明:通常来说,网络爬虫应该遵循网站所描述的robots协议。因此,任何网络爬虫都有关于robots协议部分的处理。

分析入口:Robot相关处理的入口位于Fetcher.java的L676,如下所示:

BaseRobotRules rules = protocol.getRobotRules(fit.url, fit.datum);

 

Fetcher抓取每个URL之前都会先查看系统之前是否已经获取了URL所对应的robots协议,如果已经获取了,则检查该URL是否符合robots协议的规则,如果不符合,则会跳过该URL不抓取。如下:

if(!rules.isAllowed(fit.u.toString())) {

                // unblock

                fetchQueues.finishFetchItem(fit,true);

                if (LOG.isDebugEnabled()) {

                  LOG.debug("Denied byrobots.txt: " + fit.url);

                }

                output(fit.url, fit.datum, null, ProtocolStatus.STATUS_ROBOTS_DENIED, CrawlDatum.STATUS_FETCH_GONE);

               reporter.incrCounter("FetcherStatus", "robots_denied", 1);

                continue;

              }

getRobotRules的过程如下:

网站所对应的Robot规则放在Hashtable<String,BaseRobotRules>缓存里,其中String键为协议和子域名的组合,BaseRobotRules值为该URL所对应的Robot规则。如当爬取http://www.apache.org/时,String的值就为http:www.apache.org。

如果是第一次访问这个域名时,那么通过该URL获取出来就是空null,此时将以该URL为基础生成一个获取robot的URL,如http://www.apache.org/robots.txt。然后发送HTTP请求获取该robot协议并调用RobotRulesParser.parseRules来解析。 解析成功后,就将其放入HashTable的缓存中。解析Robot协议的代码是引用的一个叫crawler-commons的第三方库,该库也是开源的,可以在https://code.google.com/p/crawler-commons/找到。Nutch1.7使用的是crawler-commons-0.2版本。

如果没有找到该robots.txt,那么系统将用默认的空规则,也就是允许抓取所有的页面。同时也将其作为该URL对应的规则放入HashTable缓存,这样下次访问该子域名的时候不用重复获取Robot规则,直接取出来进行判断即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

nutch v1.9源码分析(5)——generator分析

1.1        generator 1.1.1     职责 generator的目的是从crawldb中根据一定的选取策略,选取一部分url作为本次循环爬取列表(fetchlist)。在生成...

Nutch1.7学习笔记7:Robots协议处理流程

说明:通常来说,网络爬虫应该遵循网站所描述的robots协议。因此,任何网络爬虫都有关于robots协议部分的处理。 分析入口:Robot相关处理的入口位于Fetcher.java的L676,如...

Nutch1.7学习笔记2:基本工作流程分析

Nutch1.7学习笔记2:基本工作流程分析 作者:雨水,时间:2013-11-13博客地址:http://blog.csdn.net/gobitan 说明:本文的工作流程分析基于1.x的最新版Nut...
  • gobitan
  • gobitan
  • 2013年11月30日 09:25
  • 3189

Linux邻居协议 学习笔记 之七 arp数据包处理流程

上面一节分析了arp协议的初始化过程。本节主要是arp数据包的处理流程,在arp初始化时,通过调用dev_add_pack将arp协议的接收处理函数添加到了三层协议数据包处理函数相关的hash链表pt...

XMPP协议学习笔记五(Openfire消息处理流程)

XMPP协议作为一个IM,其核心在于消息的传递,在Openfire服务器对XMPP的实现中,消息被封装为Packet对象,因此Openfire服务器的核心代码是对客户端Packet对象的监听和处理流程...

Nutch1.7学习笔记1:基本环境搭建及使用

说明:Nutch有两个主版本1.x和2.x,它们的主要区别是2.x引入了Gora作为存储抽象层,从而支持各种NoSQL数据库,如HBase,Cassandra等。本文是以1.x的最新版Nutch1.7...

Nutch1.7学习笔记3:Injector源代码分析

Injector的主要功能 Injector的主要功能是将urls目录下的文本文件中的URL地址注入到CrawlDb中。 Injector类基本构成 (1) 三个主成员变量 n...

Nutch1.7学习笔记6:ParseSegment源代码分析

Nutch1.7学习笔记6:ParseSegment源代码分析 作者:雨水,时间:2013-11-17 博客地址:http://blog.csdn.net/gobitan ParseSegment分析...
  • gobitan
  • gobitan
  • 2013年11月30日 10:38
  • 3616

Nutch1.7学习笔记3:Injector源代码分析

Nutch1.7学习笔记3:Injector源代码分析 作者:雨水,时间:2013-11-13 博客地址:http://blog.csdn.net/gobitan Injector的主要功能 Inje...
  • gobitan
  • gobitan
  • 2013年11月30日 09:28
  • 3066

Nutch1.7学习笔记5:Fetcher源代码分析

Fetcher分析 Fetcher是以生产者/消费者模式来处理网页抓取的。 QueueFeeder作为生产者,从前面Generator中产生的读取出来,然后加入到FetchItemQueu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Nutch1.7学习笔记7:Robots协议处理流程
举报原因:
原因补充:

(最多只允许输入30个字)