`

nutch的基本工作流程理解

阅读更多

(一):Nutch的工作流程:

Crawdblinkdb

web link目录,存放urlurl的互联关系,作为爬行与重新爬行的依据。

segments

是主目录,存放抓回来的网页。页面内容有bytes[]raw content parsed text的形式。nutch以广度优先的原则来爬行,因此每爬完一轮会生成一个segment目录。

index

lucene的索引目录,是indexes目录里所有index合并后的完整索引,注意索引文件只对页面内容进行索引,没有进行存储,因此查询时要去访问segments目录才能获得页面内容。

(一):流程综述:

1】:inject start urls

注入抓取URL。因为Nutch的抓取程序是要抓取网页,而定位到某个网页需要制定一个URL,所以Nutch按照广度遍历策略进行抓取,会根据一开始指定的URL,也可以是一个URLS集合,以此基础进行抓取工作。

2】:generate segment

生成segmentNutch抓取程序需要抓取到很多的页面,那么具体是哪些页面的?当然,在互联网上是通过URL来定位的。这一步骤主要是对上一步提交的URL集合进行分析,确定抓取任务的详细信息。

3fetch list

分析提交的URL集合之后,建立一个抓取任务列表。在以后的抓取工作中就可以根据预处理的此列表进行工作了。

4】:www

这是通过访问万维网(www),实现抓取工作。

5】:fetch content

开始根据前面生成的抓取任务列表中指定的URL对应的页面,这时候开始抓取工作了。

6】:fetched content

需要将抓取到的这些页面文件存放到指定的位置,这些页面文件可以是经过简单预处理以后而被存储到文件系统中,也可以是原生的网页文件,以备后继流程基于这些文件来进一步处理,比如分词,建立索引。

content parser

内容解析器。抓取到的页面文件被提交到这里,实现对页面文件的处理,包括页面文件的分析和处理。

7】:parse content

当然,我们抓取的数据是结构和内容非常复杂的数据,而我们感兴趣的主要是文件的内容,因为基于关键字检索的搜索引擎的实现,都是根据文本内容来实现的。

8】:parsed text & data

通过content parser解析器,最终获取到的就是文本内容和其它一些可能需要用到的数据。有了这些可以识别的文本内容和数据,就可以基于此来建立索引库,而且需要将本次抓取任务的详细信息登录到crawlDB,为下次抓取任务提供有用的信息(比如:避免重复抓取相同的URL指定的页面)

因此接下来分为两个方向:一个是索引,一个是更新crawlDB并继续执行抓取任务:

9】:indexing

这是一个索引的过程,对分析处理完成并提交的文本及其数据建立索引,通过索引文件就可以实现信息的检索功能了。建立索引过程中,由于是基于Lucene的,所以用到了Analyzer分析器,对预处理的文件进行分析、过滤、分词等等,最后将写入到索引库,供搜索程序工作使用。

10】:update crawlDB with new extracted urls

根据网页分析处理获取到的信息,更新crawlDB(爬行数据库),并根据提取到的抓取任务已经注入的URLs循环执行抓取任务。

(二):Nutch工作流程总结

上面的流程已经分析地非常透彻了,参考一些资料做个总结吧。通过下面总结的工作流程,理清思路,很有帮助的,如下所示,Nutch的工作流程描述:

抓取程序工作流程

(1.) 建立初始URL

(2.) URL集注入crawldb数据库---inject

这一步骤,上面的图中没有涉及到。既然需要维护一个crawlDB,那么在任何时候只要与抓取任务有关的而且是有用的信息都会被写入crawlDB

(3.) 根据crawldb数据库创建抓取列表---generate

(4.) 执行抓取,获取网页信息---fetch

(5.) 更新数据库,把获取到的页面信息存入数据库中---updatedb

(6.) 重复进行35的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环

(7.) 根据sengments的内容更新linkdb数据库---invertlinks

(8.) 建立索引---index

搜索程序工作流程

(1.) 用户通过用户接口进行查询操作

(2.) 将用户查询转化为lucene查询

(3.) 从索引库中提取满足用户检索需求的结果集

(4.) 返回结果

 

分享到:
评论
17 楼 p_x1984 2009-12-29  
现在比较稳定还是nutch-1.0吧!
16 楼 comsci 2009-12-29  
另外,你们用的是什么版本的呢? 听说好像最新的版本不如老版本的好呢?
15 楼 p_x1984 2009-12-27  
你看nutch的源码了?在fetch.java类中有说明,具体的我还得看下源码。
14 楼 comsci 2009-12-27  
p_x1984 写道
这个问题我已经弄明白了,同样的不管有多少的url,都写在url.txt中就行,nutch 在启动的时候自然的就会找到url.txt中这些url了。

还有个问题,如果要抓取多个URL的话,NUTCH的工作线程是怎么安排的呢?
13 楼 p_x1984 2009-12-26  
这个问题我已经弄明白了,同样的不管有多少的url,都写在url.txt中就行,nutch 在启动的时候自然的就会找到url.txt中这些url了。
12 楼 comsci 2009-12-26  
同楼上,比如说我只想抓取40个网站的内容,这些URL是如何配置到NUTCH中去的呢?
11 楼 p_x1984 2009-11-27  
在nutch中如何配置多个url,知道的麻烦说下。
抓取什么内容,主要看业务的方向。大部分的貌似都是网页中的部分内容。
10 楼 comsci 2009-11-27  
diddyrock 写道
复杂太多了,有个别人的代码很漂亮但是看起来很费神。现在联抓取都支持单站点恒定连接数了,实在是太复杂了,好在plugin写起来不是很困难,但是想要高效还是有点复杂。nutch对于硬件没有太多要求,一台个人pc就可以了,硬盘最好企业级。关键是网络的稳定,而且nutch有内存泄漏的bug,建议你等下一个稳定版本,或者直接trunk。

如果我们想抓取的网站仅仅限于有限多个网站的内容,而不像GOOGLE那样是全网抓取,那么有可能对存储的要求比较低,事实上我们也仅仅只需要这样的搜索引擎
9 楼 diddyrock 2009-11-26  
复杂太多了,有个别人的代码很漂亮但是看起来很费神。现在联抓取都支持单站点恒定连接数了,实在是太复杂了,好在plugin写起来不是很困难,但是想要高效还是有点复杂。nutch对于硬件没有太多要求,一台个人pc就可以了,硬盘最好企业级。关键是网络的稳定,而且nutch有内存泄漏的bug,建议你等下一个稳定版本,或者直接trunk。
8 楼 comsci 2009-11-26  
另外有个问题想了解下,如果一个小企业或者个人实验室(person lab)要搭建一个基于NUTCH的搜索引擎整列出来,对系统硬件要求是怎么样的?
7 楼 comsci 2009-11-25  
javaeyes 写道
nutch不算复杂的。comsci nutch在hadoop上运行,只要hadoop分布式部署了,nutch就可以分布式爬取


单机运行NUTCH和多机并行运行NUTCH,在搜索效率和存储空间上面有什么比较显著的区别吗?
6 楼 biaowen 2009-11-24  
有点膨胀。
5 楼 javaeyes 2009-11-24  
nutch不算复杂的。comsci nutch在hadoop上运行,只要hadoop分布式部署了,nutch就可以分布式爬取
4 楼 diddyrock 2009-11-24  
nutch越搞越复杂了
3 楼 comsci 2009-11-24  
chenlinping 写道
nutch基于hadoop,支持分布式的

谢谢。。。我还想了解下NUTCH具体的分布式应用方式
2 楼 chenlinping 2009-11-23  
nutch基于hadoop,支持分布式的
1 楼 comsci 2009-11-21  
想咨询下楼主,如果我用n台机器搭建一个NUTCH服务器整列,那么NUTCH是否支持这种集群工作方式呢》

相关推荐

Global site tag (gtag.js) - Google Analytics