nutch-介绍

  Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。

  nutch是开放源代码的,因此任何人都可以查看他的排序算法是如何工作的。商业的搜索引擎排序算法都是保密的,我们无法知道为什么搜索出来的排序结果是如何算出来的。更进一步,一些搜索引擎允许竞价排名,比如百度,这样的索引结果并不是和站点内容相关的。因此 nutch 对学术搜索和政府类站点的搜索来说,是个好选择,因为一个公平的排序结果是非常重要的。

  学习搜索引擎Nutch,了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情。在写Nutch的过程中,从学院派和工业派借鉴了很多知识:比如,Nutch的核心部分目前已经被重新用 Map Reduce 实现了。Map Reduce 是一个分布式的处理模型,最先是从 Google 实验室提出来的。并且 Nutch 也吸引了很多研究者,他们非常乐于尝试新的搜索算法,因为对Nutch 来说,这是非常容易实现扩展的。

   Nutch 是非常灵活的:他可以被很好的客户订制并集成到你的应用程序中,使用Nutch 的插件机制,Nutch 可以作为一个搜索不同信息载体的搜索平台。当然,最简单的就是集成Nutch到你的站点,为你的用户提供搜索服务

nutch的目标 
nutch致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, nutch必须能够做到:

•  每个月取几十亿网页
•  为这些网页维护一个索引
•  对索引文件进行每秒上千次的搜索
•  提供高质量的搜索结果
•  以最小的成本运作 

nutch和luene

Lucene 不是完整的应用程序,而是一个用于实现全文检索的软件库。
Nutch 是一个应用程序,可以以 Lucene 为基础实现搜索引擎应用。 

  Lucene为 Nutch 提供了文本索引和搜索的API。一个常见的问题是;我应该使用Lucene还是Nutch?最简单的回答是:如果你不需要抓取数据的话,应该使用Lucene。常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API建立索引。

nutch基本原理分析

1 nutch的基本组成

  nutch作为一个搜索引擎,其基本组成也同其他搜索引擎一样。简单的说,包括爬虫,索引和搜索三部分。

2 nutch工作流程

在前面的nutch初体验中,我们就是按照nutch的工作流程来进行的,现在总结如下:

1) 建立初始URL集
2) 将URL集注入crawldb数据库---inject
3) 根据crawldb数据库创建抓取列表---generate
4) 执行抓取,获取网页信息---fetch
5) 更新数据库,把获取到的页面信息存入数据库中---updatedb
6) 重复进行3~5的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环
7) 根据sengments的内容更新linkdb数据库---invertlinks
8) 建立索引---index
9) 用户通过用户接口进行查询操作 10) 将用户查询转化为lucene查询 11) 返回结果
其中,1~6属于爬虫部分;7、8属于索引部分;9~11属于查询部分。 (注: 进行内部网爬行时执行的crawl操作,实质上也是执行的以上一系列操作,这一点从它的抓取日志上可以看出)

nutch工作流程分析

爬虫-工作策略

其工作策略一般则可以分为累积式抓取(cumulative crawling)增量式抓取(incremental crawling)两种。

  累积式抓取是指从某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。在理想的软硬件环境下,经过足够的运行时间,累积式抓取的策略可以保证抓取到相当规模的网页集合。但由于Web数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致。

  与累积式抓取不同,增量式抓取是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。进行增量式抓取的前提是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息。 
  面向实际应用环境的网络蜘蛛设计中,通常既包括累积式抓取,也包括增量式抓取的策略。累积式抓取一般用于数据集合的整体建立或大规模更新阶段;而增量式抓取则主要针对数据集合的日常维护与即时更新。 
在确定了抓取策略之后,如何从充分利用网络带宽,合理确定网页数据更新的时间点就成了网络蜘蛛运行策略中的核心问题。

工作流程分析

1.建立初始URL集

初始URL集的建立有两种方式:超链接和站长提交

  超链接:机器人程序根据网页链到其他网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始.连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超连结,机器人便可以遍历绝大部分网页。
  站长提交:在实际运行中,爬虫不可能抓取到所有站点,为此,网站站长可以向搜索引擎进行提交,要求收录,搜索引擎经过核查之后,便将该网站加入到URL集合中,进行抓取。 

2.inject

inject操作调用的是nutch的核心包之一crawl包中的类injector
inject操作主要作用 将URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值;将URL进行合并,消除重复的URL入口; 将URL及其状态、分值存入crawldb数据库,与原数据库中重复的则删除旧的,更换新的。
inject操作结果:crawldb数据库内容得到更新,包括URL及其状态。

3.generate

generate操作调用的是crawl包中的类generator。 generate操作主要作用 从crawldb数据库中将URL取出并进行过滤对URL进行排序,通过域名、链接数和一种hash算法综合进行降
序排列\将排列列表写入segment 

4.fetch

fetch操作调用的是fetcher包中的类fercher。
fetch操作主要作用  执行抓取,按照segment文件夹下的抓取列表进行抓取过程中,页面的URL地址可能因为链接发生改变,从而需要更新URL地址抓取采用多线程方式进行,以提高抓取速度 fetch操作过程中调用了parse操作
fetch操作结果:将页面内容抓取下来,存于segment目录下

5.parse

parse操作调用的是parse包中的类parsesegment。
parse操作主要作用
    解析segment中由fetch得到的页面,并进行整理,将页面分成为
    parse-date和parse-text
    parse-date中保存的是页面的题名、作者、日期、链接等内容
    parse-text中保存的是页面的文本内容
parse操作结果:将fetch得到的页面解析为text和data,存于segment
目录下 

6.updatedb

updatedb操作调用的是crawl包中的类crawldb
updatedb操作主要作用
    根据segment目录下fetch文件夹和parse文件夹中的内容,对crawldb
进行更新,增加新的URL,更换旧的URL
updatedb操作结果:更新了crawldb数据库,为下一轮抓取做准备
时间: 2024-10-06 15:30:58

nutch-介绍的相关文章

Nutch介绍

Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降. 并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益.这显然 不利于广大Internet用户. Nutch为我们提供了这样一个不同的选择. 相对于那些商用的搜索引擎, Nutch作为开放源代码 搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎

Nutch爬虫安装向导与命令详解

Nutch介绍 Nutch是一个开源的用java实现的一个搜素引擎,它包含两个部分的内容:爬虫和搜索. 我们这里主要介绍nutch的爬虫部分,爬虫系统是由nutch爬虫工具Cralwer实现的,生成数据文件主要包括三类,分别是webdatabase,一系列的segment加上index,三者的物理文件分别存储在爬行结果目录下的db目录下webdb子文件夹内,segments文件夹和index文件夹. Nutch安装 步骤1:从下面的网站中下载nutch包 http://lucene.apache

java 网络爬虫框架

java 网络爬虫框架: apache Nutch ,Heritrix等,主要参照开源社区提供的40个开源项目 文章背景: 最近要写个爬虫抓去新浪微博的数据,然后用hadoop存储后,进行分析,就在网上搜取相关资料. 网友推荐使用python来做,但鉴于本人擅长的是java,学习python需要一定的时间成本,还是选择java.一开始想自己从头写,搜到apache httpClient,  后来想着还是用开源成熟的框架来做,目前觉得apache Nutch 和Heritrix是个不错的选择,不过

手把手教你写网络爬虫(3):开源爬虫框架对比

手把手教你写网络爬虫(3) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 介绍 大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过<手把手>系列的前两篇,那么今天的内容就非常容易理解了.细心的读者也许会有疑问,为什么不学出身名门的Apache顶级项目Nutch,或者人气飙升的国内大神开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度: Project Language Star Watch Fork Nutch Java 1

小白学爬虫:开源爬虫框架对比(三)

摘要:从零开始写爬虫,初学者的速成指南! 介绍 大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过<手把手>系列的前两篇,那么今天的内容就非常容易理解了.细心的读者也许会有疑问,为什么不学出身名门的Apache顶级项目Nutch,或者人气飙升的国内大神开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度: ProjectLanguageStarWatchFork NutchJava1111195808 webmagicJava42166182

开源爬虫Labin,Nutch,Neritrix介绍和对比

开源爬虫Labin,Nutch,Neritrix介绍和对比 2 6 从网上找了一些开源spider的相关资料,整理在下面: Larbin开发语言:C++http://larbin.sourceforge.net/index-eng.htmllarbin是个基于C++的web爬虫工具,拥有易于操作的界面,不过只能跑在LINUX下,在一台普通PC下larbin每天可以爬5百万个页面(当然啦,需要拥有良好的网络) 简介 Larbin是一种开源的网络爬虫/网络蜘蛛,由法国的年轻人 Sébastien A

Nutch搜索引擎(第4期)_ Eclipse开发配置

1.环境准备 1.1 本期引言 前三期分别介绍了Nutch与Solr在Linux上面的安装,并做了简单的应用,这一期从开发的角度进行,因为我们日常最熟悉的开发环境是Windows,所以本期详细介绍Windows平台的Nutch二次开发所需要进行的配置安装.当我们开发好之后,最后在部署到Linux环境中. 为了方便以后Nutch开发以及软件安装的管理,我们对开发环境配置进行如下安排: E:/(盘符) |----cygwin |----NutchWorkPlat |----ant |----solr

Nutch

介绍 Apache Nutch是一个用Java编写的开源网络爬虫.通过它,我们就能够自动地找到网页中的超链接,从而极大地减轻了维护工作的负担,例如检查那些已经断开了的链接,或是对所有已经访问过的网页创建一个副本以便用于搜索.接下来就是Apache Solr所要做的.Solr是一个开源的全文搜索框架,通过Solr我们能够搜索Nutch已经访问过的网页.幸运的是,关于Nutch和Solr之间的整合在下方已经解释得相当清楚了. Apache Nutch对于Solr已经支持得很好,这大大简化了Nutch

《图解Spark:核心技术与案例实战》介绍及书附资源

本书中所使用到的测试数据.代码和安装包放在百度盘提供 下载 ,地址为https://pan.baidu.com/s/1o8ydtKA 密码:imaa 另外在百度盘提供本书附录  下载 ,地址为http://pan.baidu.com/s/1o7Busye 密码:shdf 为什么要写这本书 在过去的十几年里,由于计算机普遍应用和互联网的普及数据呈现了爆发式增长,在这个背景下Doug Cutting受到谷歌两篇论文(GFS和MapReduce)的启发下开发Nutch项目, 2006年Hadoop脱离

Spark 学习: spark 原理简述与 shuffle 过程介绍

Spark学习: 简述总结 Spark 是使用 scala 实现的基于内存计算的大数据开源集群计算环境.提供了 java,scala, python,R 等语言的调用接口. Spark学习 简述总结 引言 1 Hadoop 和 Spark 的关系 Spark 系统架构 1 spark 运行原理 RDD 初识 shuffle 和 stage 性能优化 1 缓存机制和 cache 的意义 2 shuffle 的优化 3 资源参数调优 4 小结 本地搭建 Spark 开发环境 1 Spark-Scal