Nutch搜索引擎系统架构
Nutch搜索引擎(第1期)_Nutch简介及安装

细细品味Nutch——Nutch搜索引擎(第1期)精华集锦csAxp虾皮工作室/xia520pi/2014年3月18日Nutch搜索引擎(第1期)——Nutch简介及安装1、Nutch简介Nutch是一个由Java实现的,开放源代码(open-source)的web搜索引擎。
主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的接口来对其网页数据进行查询的一套工具。
其底层使用了Hadoop来做分布式计算与存储,索引使用了Solr分布式索引框架来做,Solr是一个开源的全文索引框架,从Nutch 1.3开始,其集成了这个索引架构。
Nutch目前最新的版本为version1.4。
1.1 Nutch的目标Nutch致力于让每个人能很容易,同时花费很少就可以配置世界一流的Web搜索引擎。
为了完成这一宏伟的目标,Nutch必须能够做到:●每个月取几十亿网页●为这些网页维护一个索引●对索引文件进行每秒上千次的搜索●提供高质量的搜索结果●以最小的成本运作1.2 Nutch的优点●透明度Nutch是开放源代码的,因此任何人都可以查看他的排序算法是如何工作的。
商业的搜索引擎排序算法都是保密的,我们无法知道为什么搜索出来的排序结果是如何算出来的。
更进一步,一些搜索引擎允许竞价排名,比如百度,这样的索引结果并不是和站点内容相关的。
因此Nutch对学术搜索和政府类站点的搜索来说,是个好选择。
因为一个公平的排序结果是非常重要的。
●扩展性你是不是不喜欢其他的搜索引擎展现结果的方式呢?那就用 Nutch 写你自己的搜索引擎吧。
Nutch 是非常灵活的,他可以被很好的客户订制并集成到你的应用程序中。
使用Nutch 的插件机制,Nutch 可以作为一个搜索不同信息载体的搜索平台。
当然,最简单的就是集成Nutch到你的站点,为你的用户提供搜索服务。
●对搜索引擎的理解我们并没有google的源代码,因此学习搜索引擎Nutch是个不错的选择。
网络数据采集框架Nutch及其应用研究

网络数据采集框架Nutch及其应用研究一、Nutch框架简介Nutch是一个开源的网络数据采集框架,最早由Doug Cutting创建于2002年,它使用Java语言编写,可以在大规模的网络环境中进行数据的采集和处理。
Nutch的核心组件包括了一个网络爬虫和一个索引器,它们可以协同工作来对互联网上的各种信息进行抓取、存储、索引和搜索。
Nutch框架的设计理念是模块化和可扩展的,使得用户可以根据自己的需求来定制和扩展不同的功能,从而实现个性化的数据采集和处理。
二、Nutch的工作原理Nutch框架的工作原理可以简单概括为以下几个步骤:1. 网络爬取:Nutch通过网络爬虫来遍历互联网上的网页,并对这些网页进行数据的抓取和提取。
2. 数据存储:Nutch使用分布式文件系统来存储抓取到的数据,这样可以有效地管理和存储大量的网络数据。
3. 数据索引:Nutch使用索引器来对抓取到的数据进行索引,从而可以更快速地进行搜索和检索。
通过这些步骤,Nutch可以实现对互联网上的大量数据进行高效的采集和处理,为用户提供了一个方便和强大的工具来进行网络数据的分析和利用。
三、Nutch的应用研究1. 企业信息采集:在企业信息化建设中,Nutch可以用来对竞争对手的产品信息、市场动态和客户需求等进行采集和分析,从而帮助企业制定更加科学和有效的决策。
2. 社交网络分析:社交网络中的信息是非常丰富和多样的,Nutch可以用来对这些信息进行采集和整理,从而为研究人员和分析师提供有力的支持。
3. 互联网舆情监测:Nutch可以实现对互联网上的舆情信息进行自动化的采集和分析,帮助政府和企业在第一时间掌握舆情动向,及时做出相应的处理。
4. 学术研究和信息检索:研究人员可以使用Nutch来对学术网站和数据库中的文献信息进行采集和整理,从而帮助他们进行更加有效的文献检索和资料分析。
以上仅是Nutch在一些典型领域的应用情况,实际上Nutch在网络数据采集和分析方面还有很多其他的应用场景,如金融行业的信息监测、政府部门的数据整合等。
基于Nutch的分布式搜索引擎的设计与研究的开题报告

基于Nutch的分布式搜索引擎的设计与研究的开题报告一、选题背景随着互联网的普及,信息量的爆炸式增长,搜索引擎的需求变得越来越强烈。
然而,传统的搜索引擎通常只能以依赖中心节点的方式实现,无法满足大规模数据的搜索需求。
因此,基于分布式架构的搜索引擎越来越被人们所青睐。
近年来,分布式搜索引擎的研究和实现取得了非常大的进展。
其中,基于Apache Nutch的分布式搜索引擎备受关注。
Nutch是一个开源的搜索引擎,其设计理念、体系结构和算法都很成熟,非常适合用于分布式搜索引擎的开发。
二、选题意义基于Nutch的分布式搜索引擎有着极高的实用价值和研究价值。
首先,它能够支持海量数据的高效搜索。
其次,它还能够提供更准确、丰富的搜索结果,从而更好地满足人们的需求。
另外,此类搜索引擎的研究,对于分布式计算、搜索引擎原理等领域都有着积极的推动作用。
三、选题内容本论文的内容主要包括以下几个方面:1.分析分布式搜索引擎的背景和现状,全面了解现有的分布式搜索引擎架构及其优缺点。
2.介绍基于Nutch的分布式搜索引擎的设计原理与体系结构,详细阐述它的特点以及与传统搜索引擎的区别。
3.实现基于Hadoop的Nutch数据抓取,并对数据进行处理和清洗等预处理操作。
4.设计合理的搜索算法,提高搜索结果的准确性和可靠性,从而满足用户的需求。
5.实验部分将验证系统的搜索效果,通过评估与比较将得出各项性能指标,以确定本搜索引擎的实际搜索效率。
四、预期目标和成果1.实现基于Nutch的分布式搜索引擎原型,包括基于Hadoop的数据抓取、清洗和搜索算法设计。
2.对系统进行性能测试和评估,对搜索结果进行准确性和可靠性评测,从而得出结论。
3.提出改进方案并进行实现,以进一步提高系统的性能和用户体验。
五、研究方法本论文将采用文献调研、实证分析等研究方法,通过分析分布式搜索引擎的相关技术和运作原理,以及实验验证、性能测试等手段进行论证。
六、研究计划第一阶段(2022年01月-2022年04月):阅读相关文献,深入研究分布式搜索引擎的相关技术和运作原理。
网络数据采集框架Nutch及其应用研究

网络数据采集框架Nutch及其应用研究一、Nutch框架概述Nutch是一种全文搜索引擎和网络爬虫框架,是由Apache Lucene和Hadoop等开源软件组成的平台。
它包括爬虫、索引器和搜索器等模块,可以对互联网上的文本、图像、视频等数据进行采集、存储、处理和检索。
Nutch的设计目标是实现一个高度可扩展的网络爬虫系统,支持定制化开发和快速性能优化。
Nutch的架构基于分布式计算,由多个节点协同工作完成大规模数据采集和处理任务。
它使用Hadoop作为底层的分布式计算框架,可以支持海量数据的并行处理和计算。
同时,Nutch也提供了灵活的配置选项和丰富的插件机制,可以根据不同的需求和场景进行自定义开发和扩展功能。
1. 开源:Nutch是一种开源软件,可以自由获取和使用,具有较低的开发和维护成本。
2. 可扩展性强:Nutch采用分布式计算和插件机制,可以方便地增加和扩展新的功能模块和算法。
3. 支持多语言:Nutch可以支持多种语言的分词和搜索,包括英语、中文、日语等。
4. 支持自定义:Nutch可以根据用户的需求和场景进行自定义开发和优化,例如自定义爬虫策略、页面过滤规则、索引器等。
5. 数据可视化:Nutch可以将采集的数据进行可视化处理,例如生成统计图表、地理信息图等。
1. 信息检索Nutch可以通过网络爬虫批量采集互联网上的文本、图像、视频等信息,再通过索引器建立数据索引,最终通过搜索器实现信息检索。
在这一过程中,Nutch可以支持多种搜索算法和检索模式,并提供定制化开发选项。
2. 情感分析通过采集互联网上的社交媒体、博客、新闻等数据,Nutch可以支持情感分析的研究。
情感分析是指通过自然语言处理和机器学习技术,对文本内容进行情绪分类和评价的过程。
Nutch可以支持多语言的分词和情感分析,例如中文、英语等。
3. 数据挖掘通过采集互联网上的数据,Nutch可以为用户提供数据挖掘的服务。
数据挖掘是指通过计算机技术分析、提取、过滤和预测数据的过程,可以应用于商业分析、科研、市场调研等领域。
基于Nutch的垂直搜索引擎系统

21 0 1年 第 2 O卷 第 9期
ht:w .— aogc t N ww cS . . p — r n
计 算 机 系 统 应 用
基于 N t uc h的垂直搜索引擎系
李耀 芳 - ,张 涛z
( 天津城市 建设 学院 电子与信 息工程系,天津 3 0 8 ) 0 3 4 ( 南开大学 信息技术科学学 院,天 津 3 0 7 ) 00 1
户 查找所需要 的信 息 。但是 目前 通用搜索 引擎在使用
的准确 度和效率 ,使信 息的定位和查 找更加的精确 ,
减 少了不相关信息 的干扰 ,并提高 了系统对 于互联 网 复杂环境 的处 理能力 。
中面临着许 多 问题 【,而与物流 信息相 关的垂 直搜索 ”
引擎 的检索主题相 关度不高 、信 息更新不及时 、信息
l 基Байду номын сангаасN th uc 的垂直搜 索 引擎 的实现
1 . 1系统 体系结构
量 小,并且没有专 门针对 国内港 口物 流信息的搜索 引 擎 【。因此 ,本 文 以天津 港数字化 口岸公共服 务平 台 2 1
q e y a d l g s c f r t n s a i g T e s s m s sa te a e n v co p c d l d n f a o g r h u r n i s n o ma o h rn . h y t u e meb s d o e t rs a emo e e t c t n a o i m o t i i i e h i i i i l t a dt er l v n eo t ea g r h i mp o e b d i gi e t c t nme h n s a dt ei o t n eo me a aatg n h ee a c f l o i m si r v h t d ya dn d ni a o i f i c a im n h mp r c f td t a s a t a o ti e k y r so e weg t g Ad i g‘u n l a d i g’ c a im e t e a a o s u st p c h tc n an t e wo d ft i h i . d n ‘ n e n l 'me h n s t d a wi s p r t n is e i h h n t h n o l h i o
Nutch 插件系统浅析

本文中,您可以通过研究分析Nutch 插件系统的内部架构和流程,来掌握Nutch 插件系统的核心设计。
架构师可参考Nutch 的插件系统设计出更加灵活的系统架构。
Nutch 基本情况Nutch 是Apache 基金会的一个开源项目,它原本是开源文件索引框架Lucene 项目的一个子项目,后来渐渐发展成长为一个独立的开源项目。
它基于Java 开发,基于Lucene 框架,提供Web 网页爬虫功能。
另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展,正是由于有此框架,使得Nutch 的插件开发非常容易,第三方的插件也层出不穷,极大的增强了Nutch 的功能和声誉。
本文就是主要描述这个插件框架内部运行的机制和原理。
回页首Nutch 的插件体系结构在Nutch 的插件体系架构下,有些术语需要在这里解释:1.扩展点ExtensionPoint扩展点是系统中可以被再次扩展的类或者接口,通过扩展点的定义,可以使得系统的执行过程变得可插入,可任意变化。
2.扩展Extension扩展式插件内部的一个属性,一个扩展是针对某个扩展点的一个实现,每个扩展都可以有自己的额外属性,用于在同一个扩展点实现之间进行区分。
扩展必须在插件内部进行定义。
3.插件Plugin插件实际就是一个虚拟的容器,包含了多个扩展Extension、依赖插件RequirePlugins 和自身发布的库Runtime,插件可以被启动或者停止。
Nutch 为了扩展,预留了很多扩展点ExtenstionPoint,同时提供了这些扩展点的基本实现Extension,Plugin 用来组织这些扩展,这些都通过配置文件进行控制,主要的配置文件包括了多个定义扩展点和插件(扩展)的配置文件,一个控制加载哪些插件的配置文件。
体系结构图如下:图 1. Nutch 插件体系结构图回页首插件的内部结构图 2. 插件的内部结构1.runtime 属性描述了其需要的Jar 包,和发布的Jar 包2.requires 属性描述了依赖的插件3.extension-point 描述了本插件宣布可扩展的扩展点4.extension 属性则描述了扩展点的实现典型的插件定义:version="1.0.0" 插件的版本provider-name=""> 插件的提供者ID<runtime><library name="query-url.Jar"> 依赖的Jar包<export name="*"/> 发布的Jar包</library></runtime><requires><import plugin="nutch-extensionpoints"/> 依赖的插件</requires><extension id="org.apache.nutch.searcher.url.URLQueryFilter" 扩展的ID name="Nutch URL Query Filter" 扩展的名字point="org.apache.nutch.searcher.QueryFilter"> 扩展的扩展点ID<implementation id="URLQueryFilter" 实现的IDclass="org.apache.nutch.searcher.url.URLQueryFilter"> 实现类<parameter name="fields" value="url"/> 实现的相关属性</implementation></extension></plugin>回页首插件主要配置1.plugin.folders:插件所在的目录,缺省位置在plugins 目录下。
Nutch爬虫
Nutch搜索引擎简介Nutch 是一个基于Java 实现的开源搜索引擎,其内部使用了高性能全文索引引擎工具Lucene。
从nutch0.8.0开始,Nutch 完全构建在Hadoop 分布式计算平台之上。
Hadoop 除了是一个分布式文件系统外,还实现了Google 的GFS 和MapReduce 算法。
因此基于Hadoop 的Nutch 搜索引擎可以部署在由成千上万计算机组成的大型集群上。
由于商业搜索引擎允许竞价排名,这样导致索引结果并不完全是和站点内容相关的,而Nutch 搜索结果能够给出一个公平的排序结果,这使得Nutch 在垂直搜索、档案互联网搜索等领域得到了广泛应用。
背景知识Nutch 搜索引擎是一个基于Java 的开放源代码的搜索引擎。
Nutch 搜索引擎处理流程包括抓取流程和搜索流程,如图1 所示。
相应地Nutch 也分为2部分,抓取器和搜索器。
在抓取流程中,抓取器也叫蜘蛛或者机器人,以广度优先搜索(BFS)的方式从企业内部网或者互联网抓取网页。
这个过程涉及到对CrawlDB 和LinkDB 数据库的操作。
然后Nutch 解析器开始解析诸如HTML、XML、RSS、PDF等不同格式的文档。
最后Nutch 索引器针对解析结果建立索引并存储到indexDB 和SegmentsDB 数据库中,以供搜索器搜索使用。
在搜索流程中,搜索应用使用输入关键词调用Nutch 搜索接口(Nutch Query Interface)。
应用可通过网页上的输入框输入相应关键词。
搜索接口解析搜索请求为Lucene 全文检索引擎可以识别的格式。
Nutch 索引器将会调用Lucene 引擎来响应请求在indexDB 上展开搜索。
最后搜索接口收集从索引器返回的URL、标题、锚和从SegmentsDB 返回的内容。
所有上述内容将被提供给排序算法进行排序。
排序完成后,搜索接口将返回命中的搜索结果。
由于构建在Hadoop 分布式文件系统之上,Nutch 对CrawlDB, LinkDB, SegmentsDB 和IndexDB 数据库的操作都是通过调用M/R(map/reduce) 函数完成的。
网络数据采集框架Nutch及其应用研究
网络数据采集框架Nutch及其应用研究一、Nutch的基本原理和架构Nutch是一个由Java语言编写的网络数据采集和搜索引擎工具,它采用了分布式的架构,能够实现快速、高效地抓取互联网上的信息。
Nutch的基本原理是通过模拟用户浏览器的行为,从网页中抓取所需的信息,并将其存储到本地的数据库中。
在实际应用中,Nutch通常与Apache Hadoop和Apache Solr等工具配合使用,实现数据的分布式存储和检索。
Nutch的架构主要由以下几个组件组成:1. 调度器(Scheduler):负责调度抓取任务,确定抓取的网页地址和优先级。
2. 抓取器(Fetcher):实际执行抓取任务,将网页内容下载到本地。
3. 解析器(Parser):对抓取到的网页内容进行解析,提取出其中的文本和链接信息。
4. 存储器(Storage):将解析后的数据存储到本地的数据库中,以便后续的检索和分析。
二、Nutch在实际应用中的优势1. 高效的抓取能力:Nutch采用了分布式的抓取策略,能够同时处理多个抓取任务,大大提高了抓取的效率。
2. 灵活的配置选项:Nutch提供了丰富的配置选项,用户可以根据自己的需求对抓取策略、解析规则等进行定制化设置。
3. 丰富的扩展接口:Nutch提供了丰富的扩展接口,可以方便地与其他数据分析工具进行集成,满足不同应用场景的需求。
4. 开放源代码:Nutch是一个开源项目,用户可以自由地查看和修改其源代码,满足个性化定制的需求。
三、Nutch在实际应用中的不足之处1. 抓取策略的优化:Nutch的抓取策略虽然灵活,但在实际应用中需要根据具体的需求进行优化,避免出现重复抓取和漏抓的情况。
2. 分布式环境的配置和管理:Nutch的分布式架构需要依赖于其他组件(如Hadoop),在配置和管理方面需要花费一定的精力。
3. 对大规模数据的处理能力有限:虽然Nutch在小规模数据上有良好的表现,但在处理大规模数据时,性能会有所下降,需要进一步优化。
nutch-index
Nutch 索引(一)Nutch的总体结构Nutch从总体上看来,分为三个主要的部分:爬行、索引和搜索。
以下图片为Nutch工作的示意图。
图1 Nutch工作流程步骤1-2-3-4-5属于爬行部分,编制索引时索引过程,用户查询和Lucene 检索是搜索过程。
(二)爬行的流程:1)首先建立空的URL数据库,把起始的urls存入URL数据库中;2)根据URL数据库中的数据在新创建的segment生成fetchlist,存放待爬取的urls;3)根据fetchlist数据对internet中的相关网页爬行抓取;4)把步骤3抓取的数据解析成纯文本与数据;5)从步骤4中解析的数据中提取新的urls,更新URL数据库。
之后步骤2—5循环。
(三)Nutch索引部分:1)Nutch 是基于Lucene的。
Lucene为Nutch 提供了文本索引和搜索的API。
2)Nutch的索引是以增量的方式进行的。
新建去重合并新建:Nutch索引首先对本次抓取的数据进行索引(因为以前的数据被索引过,不需要再重新索引)。
每次抓取会在indexes中建立临时目录存放新创建的索引,indexes目录中存放的是本次的索引,index 目录中存放现有的索引。
新建程序结构:Indexer类的index()函数负责创建一个job,进行索引操作。
index函数调用IndexerMapReduce类的静态函数initMRJob()初始化该job,initMRJob负责将需要建立索引的数据通过FileInputFormat.addInputPath(job, p1)操作,加载到job的输入路径中,所以可以通过修改iniMRJob()函数来控制建立索引的输入数据,即只将本次爬取的数据作为输入来避免重复建立索引。
去重:对新的建立的索引和以前建立的索引进行去重操作,(其中如果新抓取的url已经存在索引,则去掉重复的)。
Indexes目录下有很多个索引,每个索引一个目录。
网络数据采集框架Nutch及其应用研究
网络数据采集框架Nutch及其应用研究Nutch是一个开源的网络数据采集框架,最初由Doug Cutting开发,并于2003年开源。
它是一个基于Java的框架,用于从互联网上采集和索引大规模数据,支持分布式环境并具有高度可扩展性。
Nutch基于Apache Hadoop构建,使用了分布式文件系统HDFS和分布式计算框架MapReduce。
Nutch的主要目标是从互联网中获取低成本、可扩展和高可靠性的大规模数据,并为用户提供强大的搜索和分析功能。
Nutch提供了丰富的功能和工具,包括网络爬虫、数据提取、网页解析、数据清洗和索引等,使用户能够灵活地定制和扩展自己的数据采集系统。
Nutch的应用研究主要集中在以下几个方面:1. 网络爬虫技术:Nutch实现了高度可配置和可扩展的网络爬虫,能够从互联网上快速、智能地抓取和下载网页。
研究者可以基于Nutch提供的框架进行网络爬虫性能的优化、爬取策略的设计和算法的改进等。
2. 数据提取和网页解析:Nutch提供了丰富的数据提取和网页解析功能,可以自动从网页中提取结构化的数据。
研究者可以基于Nutch进行数据提取算法的研究和改进,使其能够更加准确和高效地从网页中提取有用的信息。
3. 数据清洗和去重:Nutch提供了强大的数据清洗和去重功能,可以对采集到的数据进行过滤、去噪和重复数据的删除。
研究者可以基于Nutch开发各种数据清洗和去重算法,以提高数据的质量和准确性。
4. 数据索引和搜索:Nutch使用Apache Solr作为搜索引擎,可以对采集到的数据进行索引和搜索。
研究者可以基于Nutch进行搜索引擎的性能优化、搜索算法的改进和用户体验的提升等研究工作。
5. 分布式计算和大数据处理:Nutch基于Apache Hadoop构建,可以运行在分布式环境下,并利用HDFS和MapReduce进行大规模数据的处理和分析。
研究者可以基于Nutch进行分布式计算和大数据处理算法的研究和开发。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面分析一下Nutch搜索引擎系统的特点。
一、系统架构
总体上Nutch可以分为2个部分:抓取部分和搜索部分。
抓取程序抓取页面并把抓取回来的数据做成反向索引,搜索程序则对反向索引搜索回答用户的请求。
抓取程序和搜索程序的接口是索引,两者都使用索引中的字段。
抓取程序和搜索程序可以分别位于不同的机器上。
下面详细介绍一下抓取部分。
抓取部分:
抓取程序是被Nutch的抓取工具驱动的。
这是一组工具,用来建立和维护几个不同的数据结构: web database, a set of segments, and the index。
下面逐个解释这三个不同的数据结构:
1、The web database,或者WebDB。
这是一个特殊存储数据结构,用来映像被抓取网站数据的结构和属性的集合。
WebDB 用来存储从抓取开始(包括重新抓取)的所有网站结构数据和属性。
WebDB 只是被抓取程序使用,搜索程序并不使用它。
WebDB 存储2种实体:页面和链接。
页面表示网络上的一个网页,这个网页的Url作为标示被索引,同时建立一个对网页内容的MD5 哈希签名。
跟网页相关的其它内容也被存储,包括:页面中的链接数量(外链接),页面抓取信息(在页面被重复抓取的情况下),还有表示页面级别的分数 score 。
链接表示从一个网页的链接到其它网页的链接。
因此 WebDB 可以说是一个网络图,节点是页面,链接是边。
2、Segment 。
这是网页的集合,并且它被索引。
Segment的Fetchlist 是抓取程序使用的url列表,它是从 WebDB中生成的。
Fetcher 的输出数据是从fetchlist 中抓取的网页。
Fetcher的输出数据先被反向索引,然后索引后的结果被存储在segment 中。
Segment的生命周期是有限制的,当下一轮抓取开始后它就没有用了。
默认的重新抓取间隔是30天。
因此删除超过这个时间期限的segment是可以的。
而且也可以节省不少磁盘空间。
Segment 的命名是日期加时间,因此很直观的可以看出他们的存活周期。
3、The index。
索引库是反向索引所有系统中被抓取的页面,它并不直接从页面反向索引产生,而是合并很多小的segment的索引产生的。
Nutch 使用Lucene 来建立索引,因此所有Lucene相关的工具 API 都用来建立索引库。
需要说明的是Lucene的segment 的概念和Nutch的segment概念是完全不同的,不要混淆。
简单来说 Lucene 的 segment 是 Lucene 索引库的一部分,而Nutch 的Segment是WebDB中被抓取和索引的一部分。
抓取过程详解:
抓取是一个循环的过程:抓取工具从WebDB中生成了一个 fetchlist 集合;抽取工具根据fetchlist从网络上下载网页内容;工具程序根据抽取工具发
现的新链接更新WebDB;然后再生成新的fetchlist;周而复始。
这个抓取循环在nutch中经常指: generate/fetch/update 循环。
一般来说同一域名下的 url 链接会被合成到同一个 fetchlist。
这样做的考虑是:当同时使用多个工具抓取的时候,不会产生重复抓取的现象。
Nutch 遵循 Robots Exclusion Protocol, 可以用robots.txt 定义保护私有网页数据不被抓去。
上面这个抓取工具的组合是Nutch的最外层的,也可以直接使用更底层的工具,自己组合这些底层工具的执行顺序达到同样的结果。
这是Nutch吸引人的地方。
下面把上述过程分别详述一下,括号内就是底层工具的名字:
1、创建一个新的WebDB (admin db -create)。
2、把开始抓取的跟Url 放入WebDb (inject)。
3、从WebDb的新 segment 中生成 fetchlist (generate)。
4、根据 fetchlist 列表抓取网页的内容 (fetch)。
5、根据抓取回来的网页链接url更新 WebDB (updatedb)。
6、重复上面3-5个步骤直到到达指定的抓取层数。
7、用计算出来的网页url权重 scores 更新 segments (updatesegs)。
8、对抓取回来的网页建立索引(index)。
9、在索引中消除重复的内容和重复的url (dedup)。
10、合并多个索引到一个大索引,为搜索提供索引库(merge)。
在创建了一个新的WebDB后,抓取循环 generate/fetch/update 就根据最先第二步指定的根 url 在一定周期下自动循环了。
当抓取循环结束后,就会生成一个最终的索引(第7步到第10步)。
需要说明的是:上面第 8 步中每个segment 的索引都是单独建立的,之后才消重(第9步)。
第10步就是大功告成,合并单独的索引到一个大索引库。
Dedup 工具可以从 segment 的索引中去除重复的url。
因为 WebDB 中不允许重复的url ,也就是说 fetchlist 中不会有重复的url,所以不需要对fetchlist 执行 dedup 操作。
上文说过,默认的抓取周期是30天,如果已经生成的旧 fetch 没有删除,而又生成了新的fetch 这是还是会出现重复的url的。
当只有一个抓取程序运行的时候是不会发生上述情况的。
从上面的介绍可以看出,一般情况下我们只要从头执行的程序就可以了,不需要接触底层的工具。
但是搜索引擎有很多“意外”,很多的时间需要花费在维护上,所以底层的工具也是需要掌握的。