您的位置:首页 > 其它

爬虫调研II:Nutch的工作流程和扩展性

2009-12-24 17:19 204 查看
Nutch

的工作流程

Nutch

的工作流程可以分为两个大的部分:抓取部分与搜索部分。抓取程序抓取页面并把抓取回来的数据进行反向索引,搜索程序则对反向索引进行搜索回答用户的请求,索引是联系这两者的纽带。





I. create db




建立并初始化的
WebDB

webDB
用于存储的
URL
和页面内容。
webDB
包括
crawldb

linkdb

crawldb
就是
Page
通过描述网络上一个网页的特征信息来表征实际的网页,通过网页
URL
和网页内容的
MD5
两种索引方法对这种网页实体进行索引。
crawldb
存储了
nutch
所知道的所有所有页面的
url
,以及
url
是否爬过,什么时候爬过,重要度等信息。
linkdb
包括每个
url
页面中所有
link
,以及它们的“链接名”。








II. inject db 将初始的
URLs
存入
WebDB

crawldb
)数据库。








III. generate db segment




segment
是一个数据结构,是处理
nutch
爬虫处理的一个单元。每个
segment
包括“
fetchlist
”,用于保存尚未爬行的
URLs;


fetch output
”保存已经爬行过的页面
;

index
”保存了保存页面的
Lucene
格式倒排索引。



这步的作用是根据已有的
URLs
建立新的
segment
,含有要爬行的页面,其他的部分都是空,等待爬行后再进行填写。


segment
实际上是一个文件夹,以产生的日期为文件夹名,其中包括了若干子文件夹。
crawl_generate
是待爬行的
URL
集合。
crawl_fetch
包括每个
URL
爬行的状态。
content
包括每个
url
的页面内容。
parse_text
包括每个
url
的文本内容。
parse_data
包括每个
url
的元数据和外向链接。
crawl_parse
包括了所有的外向链接,用来更新
crawldb








IV.
fetch



fetch
根据segment中的fetchlist爬行url,之后会改写segment,填入爬行的内容。可以给fetcher指定URL爬行深度,使用的
thread数量等等。每个线程就是一个fetcher,对应一个fetchlist。指向同一个主机上Web资源的URLs通常被分配到同一个
Fetchlist中,防止过多的Fetchers对一个主机同时进行抓取造成主机负 担过重。另外Nutch遵守Robots Exclusion
Protocol,网站可以通过自定义Robots.txt控制Crawler的抓取。fetch的处理过程是通过内部类FetchThread来运作
的,首先建立若干个FetchListEntry,再从中选出若干Entry进行处理。如果没有标记fetch,则对此url建立初始的一个准备,空的
FetcheOutput,parseText,ParseData等等。如果标记了fetch,则从ProtocolFactory和
ParserFactory中选出适当的protocol处理方法和内容parse方法进行下载和分析处理。

V.updatedb



fetch
结束后,可以使用此命令更新
crawldb
。进行下一轮的爬行。

Nutch

的扩展性

Nutch
可以通过添加插件的方式扩展。


nutch-default.xml
指定了
plugin
的目录和
URL
分析类,可以通过覆写
nutch-site.xml
文件来改变默认配置。

plugin
目录中包括若干子目录,比如
parse-html,protocl-http
等等。这些包括页面处理和协议处理的方式。

子目录中的
plugin.xml

**.jar
组成了一个插件。

我们也可以通过这种方式添加我们自己的协议处理方式和数据处理方法。






http://starwarriors2009.spaces.live.com/Blog/cns!955289B83D9457F7!154.entry
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: