这周简单学习了一下Nutch爬取的内容。
简介
Apache的子项目之一,属于Lucene项目下的子项目。 Nutch是一个类似Google通用搜索引擎的解决方案,基于Hadoop任务的分布式处理模型保证了系统的性能,类似Eclipse的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。 总 体上Nutch可以分为2个部分:抓取部分和搜索部分。抓取程序抓取页面并把抓取回来的数据做成反向索引,搜索程序则对反向索引搜索回答用户的请求。抓取 程序和搜索程序的接口是索引,两者都使用索引中的字段。抓取程序和搜索程序可以分别位于不同的机器上,下面详细介绍一下抓取部分。抓取过程
抓取是一个循环的过程:抓取工具从WebDB中生成了一个 fetchlist 集合;抓取工具根据fetchlist从网络上下载网页内容;解析工具发现的新链接更新WebDB;然后再生成新的fetchlist;周而复始。这个抓 取循环在nutch中经常指: generate/fetch/parse/update 循环。 一般来说同一域名下的 url 链接会被合成到同一个 fetchlist。这样做的考虑是:当同时使用多个工具抓取的时候,不会产生重复抓取的现象。Nutch 遵循 Robots Exclusion Protocol, 可以用robots.txt 定义保护私有网页数据不被抓去。 上面这个抓取工具的组合是Nutch的最外层的,也可以直接使用更底层的工具,自己组合这些底层工具的执行顺序达到同样的结果。这是Nutch吸引人的地方。下面把上述过程分别详述一下,括号内就是底层工具的名字:- 把开始抓取的跟Url 放入WebDb (inject)。
- 从WebDb的新 segment 中生成 fetchlist (generate)。
- 根据 fetchlist 列表抓取网页的内容 (fetch)。
- 根据抓取回来的网页链接url
- 更新 WebDB (updatedb)。
- 重复上面2-5个步骤直到到达指定的抓取层数。
功能
- 基于Hadoop的分布式系统;
- 存储层剥离,支持存储HBase, Cassandra, MySql等数据库
- 基于插件式设计,扩展和定制比较方便
- 支持网页解析和索引,可以对接至Solr,搭建通用的搜索引擎