第一章 Nutch印象

深入解析Nutch搜索引擎架构与工作流程

第一章 Nutch印象

Nutch是什么

NutchApache旗下的Java开源项目,最初是一个搜索引擎,现在是一个网络爬虫。Nutch1.3就是Nutch从搜索引擎到网络爬虫的转折点。

下图为项目发起人

155700_WBRa_870039.jpg

图1

Nutch的目标

Nutch 致力于让每个人很容易,同时花很少的钱就可配置世界一流的Web搜索引擎。

Nutch的特性

  • 插件架构,高度模块化

    大多数功能可通过插件来实现和改变

  • 易扩展,极强的伸缩性

    当爬虫获取了上万条甚至更多数据时,很有可能一台机器装不下,那么,我们需要增加机器来存储和计算。不用修改代码,从一台可扩展到上千台

  • 高可用性,健壮容错

    容忍宕机情况的出现。

  • 灵活可配置

    配置文件注释全面,选项多。提供了162个配置参数。

Nutch的设计初衷

商业搜索引擎不开源,搜索结果不仅仅是根据网页本身的价值进行排序,而是有众多商业利益考虑。Nutch提供了开源的解决方案,帮助人们根据自己的需要构建自己的搜索引擎,为用户提供优质的搜索结果,并能从一台机器扩展到成百上千台。

我们学习的主要目的

通过Nutch爬取邮箱账号,联系方式等信息。

第二章 Nutch的安装配置

第三章 Nutch搜索引擎原理

Nutch作为一个搜索引擎,基本组成包括:爬虫、索引、搜索三部分。

Nutch爬虫的设计着重两个方面:存储与爬虫过程。

Nutch爬虫有两种方式

1、爬行企业内部网(Intranet crawling)。针对少数网站进行,用crawl 命令。

2、爬行整个互联网。 使用底层的 inject, generate, fetch updatedb 命令,具有更强的可控制性。

Nutch工作流程

153820_8sBQ_870039.jpg

图2

首先根据crawldb生成一个待抓取网页的URL集合——预抓取列表,接着下载线程Fetcher类开始根据预取列表进行网页抓取。如果下载线程有很多个,那么就生成很多个预取列表,也就是一个Fetcher类的线程对应一个预抓取列表。爬虫根据抓取回来的网页更新crawlDB,根据更新后的crawlDB生成新的预取列表。接着下一轮抓取循环重新开始。这个循环过程可以叫做"产生/抓取/更新"循环。

详细介绍工作流程

  1. 通过inject命令将起始 URL 集合注入到 Nutch 系统之中,指定存放预抓取列表的crawldb文件夹

    如我们对广州赶集网进行抓取:

    [root@master local]# bin/nutch inject data-ganji/crawldb urls/url-ganji.txt

    首先通过inject命令将起始urlhttp://gz.ganji.com/注入到Nutch系统中,作为抓取过程的入口点,系统生成crawldb文件夹,用于存放预抓取列表url

    Crawldb文件夹: 存放下载的URL,以及下载的日期,和页面更新检查时间。

    155810_yftV_870039.jpg

    图3

2、通过generate命令产生抓取列表,生成segments/crawl_generate文件夹

[root@master local]# bin/nutch generate data-ganji/crawldb data-ganji/segments

crawl_generate文件夹:存放待下载的URL的集合。

154133_wDDt_870039.jpg

图4

比较crawldbcrawl_generate的区别

155918_u46P_870039.jpg

图5

3、通过fetch命令抓取网页,生成contentcrawl_fetch文件夹

[root@master local]# bin/nutch fetch data-ganji/segments/20140301160521/ -threads 2

content文件夹:存放下载页面的内容

154335_BZti_870039.jpg

图6

154453_ui0W_870039.jpg

图7


Crawl_fetch文件夹:存放下载URL的状态内容

154618_gSff_870039.jpg

图8

比较Crawldbcrawl_generatecrawl_fetch的区别:

154730_gGpk_870039.jpg

图9

4、ontent文件夹parse命令作用下产生crawl_parseparse_dataparse_text文件夹

[root@master local]# bin/nutch parse data-ganji/segments/20140301160521/

crawl_parse文件夹:存放用来更新crawldb的外部链接库

154851_mdt9_870039.jpg

图10

parse_data文件夹:存放每个URL解析出来的外部链接和元数据

160318_K9cL_870039.jpg

图11

parse_text文件夹:存放每个解析过的URL的文本内容

155113_19Mh_870039.jpg

图12

155320_VRpV_870039.jpg

图13

5、更新crawldb文件夹

更新crawldb文件夹之前,先查看crawldb当前状态

155421_M4Ap_870039.jpg

图14

updatedb命令更新crawldb文件夹

[root@master local]# bin/nutch updatedb data-ganji/crawldb -dir data/segments/

查看更新后crawldb文件夹状态

155518_pWez_870039.jpg

图15

继续下一轮抓取网页,继续“产生/抓取/更新”循环操作。

6通过invertlinks命令产生linkdb文件夹

Linkdb文件夹:存放URL的关联关系,是下载完成后分析时创建的,通过这个关联关系可以实现类似googlepagerank功能。

[root@master local]# bin/nutch invertlinks data-ganji/linkdb -dir data-ganji/segments/

155617_8oNZ_870039.jpg

图16

7、生成索引

附:

Nutch抓取流程图

160806_w9zW_870039.jpg

图17

转载于:https://my.oschina.net/HIJAY/blog/223865

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值