4.执行抓取,获取网页信息---fetch
5.更新数据库,把获取到的页面信息存入数据库中---updatedb
6.重复进行3~5的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环
7.根据segments的内容更新linkdb数据库---invertlinks
(注:a.这里linkDB是用来存放所有超链接及每个链接的连入地址和锚文本的,如下图所示:
b.,crawlDB是用来存放所有需要抓取的超链接的信息(存放下载的URL,及下载的日期,用来页面更新检查时间)
crawlDB和linkDB 是web link目录,存放url 及url的互联关系,作为爬行与重新爬行的依据,页面默认30天过期。
c.segments是用来存放抓取的页面,它与连入深度有关(depth),在这个文件夹下面包含留个子目录,分别是:
content:抓取下来的网页内容,在网页抓取时生成
crawl_fetch:每个下载URL的状态
crawl_generate:最初生成(初始URL集,即我们常说的种子站点)
crawl_parse:用来更新crawldb的外链
parse_data:解析抓取的数据文件时生成,主要是每个URL解析出的外部链接和元数据(metadata)
parse_text:解析抓取的数据文件时生成,网页的文本信息
8.建立索引---index
二、搜索程序工作流程
1.用户通过用户接口进行查询操作
2.将用户查询转化为lucene查询
3.从索引库中提取满足用户检索需求的结果集
4.返回结果
详细介绍:
第一部分流程综述:
1.)建立初始URL集
建立URL集的方式主要通过两种:一是通过各个URL间的web链接关系即超链接,二是通过人为的加入即站长提交,因为按照超链接的方式爬虫不可能爬取网络中所有的站点,所以站长可以向搜索引擎提出收录某个站点,搜索引擎经过核查后加入,
2.)inject操作分析
inject操作调用的是nutch的核心包之一crawl包中的类org.apache.nutch.crawl.Injector。它执行的结果是:crawldb数据库内容得到更新,包括URL及其状态。
注入抓取URL。因为Nutch的抓取程序要抓取网页,而定位到某个(或者某些)网页需要指定一个URL,在此基础上,Nutch按照广度遍历策略进行抓取,会根据一开始指定的URL(可以是一个URL集合:URLs),以此为基础进行抓取工作。它主要实现以下几个功能:
a.将URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值;
b.将URL进行合并,消除重复的URL入口
c.将URL及其状态、分值存入crawldb数据库,与原数据库中重复的则删除旧的,更换新的
3.)generate 操作分析
generate操作调用的是crawl包中的类org.apache.nutch.crawl.Generator。它执行的结果是:创建了抓取 列表,存放于segments目录下,以时间为文件夹名称。循环抓取多少次,segments文件夹下就会有多少个以时间为名称的文件夹。它主要实现以下几个功能:
a. 从crawldb数据库中将URL取出并进行过滤;
b.对URL进行排序,通过域名、链接数和一种hash算法综合进行降序排列;
c.将排列列表写入segments目录中。
4.)fetch操作分析
fetch操作调用的是fetcher包中的类org.apache.nutch.fetcher.Fetcher。它执行的结果是:将页面内容抓取下来,存于segment目录下。它的主要功能如下:
a.执行抓取,按照segments目录下的抓取列表进行;
b.抓取过程中,页面的URL地址可能因为链接发生改变,从而需要更新URL地址;
c.抓取采用多线程方式进行,以提高抓取速度;
d.fetch操作过程中调用了parse操作。
5.)parse 解析操作
parse操作调用的是parse包中的类org.apache.nutch.parse.ParseSegment。它执行的结果是:将fetch得到的页面解析为parse.text和parse.data,存于segments目录下。
通过content parser解析器,最终获取到的就是文本内容和其它一些可能需要用到的数据。有了这些可以识别的文本内容和数据,就可以基于此来建立索引库,而且需要将本次抓取任务的详细信息登录到crawlDB,为下次抓取任务提供有用的信息(比如:避免重复抓取相同的URL指定的页面)。
因此接下来分为两个方向:一个是索引,一个是更新crawlDB并继续执行抓取任务:
indexing
这是一个索引的过程,对分析处理完成并提交的文本及其数据建立索引,通过索引文件就可以实现信息的检索功能了。建立索引过程中,由于是基于Lucene的,所以用到了Analyzer分析器,对预处理的文件进行分析、过滤、分词等等,最后将写入到索引库,供搜索程序工作使用。
update crawlDB with new extracted urls
根据网页分析处理获取到的信息,更新crawlDB(爬行数据库),并根据提取到的抓取任务已经注入的URLs循环执行抓取任务。
第二部分流程综述:
这部分比较简单了,就是启动WEB服务器,为用户提供检索服务。
这里,用户可以直接通过输入检索关键字,使用Lucene对用户检索关键字进行处理调用Nutch的搜索程序,基于索引库中存储的信息,来提取满足用户检索需求的信息。