第一章 Nutch印象
Nutch是什么
Nutch是Apache旗下的Java开源项目,最初是一个搜索引擎,现在是一个网络爬虫。Nutch1.3就是Nutch从搜索引擎到网络爬虫的转折点。
下图为项目发起人
图1
Nutch的目标
Nutch 致力于让每个人很容易,同时花很少的钱就可配置世界一流的Web搜索引擎。
Nutch的特性
插件架构,高度模块化
大多数功能可通过插件来实现和改变
易扩展,极强的伸缩性
当爬虫获取了上万条甚至更多数据时,很有可能一台机器装不下,那么,我们需要增加机器来存储和计算。不用修改代码,从一台可扩展到上千台
高可用性,健壮容错
容忍宕机情况的出现。
灵活可配置
配置文件注释全面,选项多。提供了162个配置参数。
Nutch的设计初衷
商业搜索引擎不开源,搜索结果不仅仅是根据网页本身的价值进行排序,而是有众多商业利益考虑。Nutch提供了开源的解决方案,帮助人们根据自己的需要构建自己的搜索引擎,为用户提供优质的搜索结果,并能从一台机器扩展到成百上千台。
我们学习的主要目的
通过Nutch爬取邮箱账号,联系方式等信息。
第二章 Nutch的安装配置
第三章 Nutch搜索引擎原理
Nutch作为一个搜索引擎,基本组成包括:爬虫、索引、搜索三部分。
Nutch爬虫的设计着重两个方面:存储与爬虫过程。
Nutch爬虫有两种方式
1、爬行企业内部网(Intranet crawling)。针对少数网站进行,用crawl 命令。
2、爬行整个互联网。 使用底层的 inject, generate, fetch 和updatedb 命令,具有更强的可控制性。
Nutch工作流程
图2
首先根据crawldb生成一个待抓取网页的URL集合——预抓取列表,接着下载线程Fetcher类开始根据预取列表进行网页抓取。如果下载线程有很多个,那么就生成很多个预取列表,也就是一个Fetcher类的线程对应一个预抓取列表。爬虫根据抓取回来的网页更新crawlDB,根据更新后的crawlDB生成新的预取列表。接着下一轮抓取循环重新开始。这个循环过程可以叫做"产生/抓取/更新"循环。
详细介绍工作流程
通过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,以及下载的日期,和页面更新检查时间。
图3
2、通过generate命令产生抓取列表,生成segments/crawl_generate文件夹。
[root@master local]# bin/nutch generate data-ganji/crawldb data-ganji/segments
crawl_generate文件夹:存放待下载的URL的集合。
图4
比较crawldb和crawl_generate的区别
图5
3、通过fetch命令抓取网页,生成content和crawl_fetch文件夹。
[root@master local]# bin/nutch fetch data-ganji/segments/20140301160521/ -threads 2
content文件夹:存放下载页面的内容
图6
图7
Crawl_fetch文件夹:存放下载URL的状态内容
图8
比较Crawldb、crawl_generate、crawl_fetch的区别:
图9
4、ontent文件夹在parse命令作用下产生crawl_parse、parse_data、parse_text文件夹。
[root@master local]# bin/nutch parse data-ganji/segments/20140301160521/
crawl_parse文件夹:存放用来更新crawldb的外部链接库
图10
parse_data文件夹:存放每个URL解析出来的外部链接和元数据
图11
parse_text文件夹:存放每个解析过的URL的文本内容
图12
图13
5、更新crawldb文件夹
更新crawldb文件夹之前,先查看crawldb当前状态
图14
用updatedb命令更新crawldb文件夹
[root@master local]# bin/nutch updatedb data-ganji/crawldb -dir data/segments/
查看更新后crawldb文件夹状态
图15
继续下一轮抓取网页,继续“产生/抓取/更新”循环操作。
6、通过invertlinks命令产生linkdb文件夹。
Linkdb文件夹:存放URL的关联关系,是下载完成后分析时创建的,通过这个关联关系可以实现类似google的pagerank功能。
[root@master local]# bin/nutch invertlinks data-ganji/linkdb -dir data-ganji/segments/
图16
7、生成索引
附:
Nutch抓取流程图
图17