nutchWord文档下载推荐.docx
《nutchWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《nutchWord文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
1.1什么是nutch
Nutch是一个开源的、Java实现的搜索引擎。
它提供了我们运行自己的搜索引擎所需的全部工具。
1.2研究nutch的原因
可能有的朋友会有疑问,我们有google,有XX,为何还需要建立自己的搜索引擎呢?
这里我列出2点原因:
(1)透明度:
nutch是开放源代码的,因此任何人都可以查看他的排序算法是如何工作的。
商业的搜索引擎排序算法都是保密的,我们无法知道为什么搜索出来的排序结果是如何算出来的。
更进一步,一些搜索引擎允许竞价排名,比如XX,这样的索引结果并不是和站点内容相关的。
因此nutch对学术搜索和政府类站点的搜索来说,是个好选择,因为一个公平的排序结果是非常重要的。
(2)扩展性:
你是不是不喜欢其他的搜索引擎展现结果的方式呢?
那就用Nutch写你自己的搜索引擎吧。
Nutch是非常灵活的:
他可以被很好的客户订制并集成到你的应用程序中,使用Nutch的插件机制,Nutch可以作为一个搜索不同信息载体的搜索平台。
当然,最简单的就是集成Nutch到你的站点,为你的用户提供搜索服务。
1.3nutch的目标
nutch致力于让每个人能很容易,同时花费很少就可以配置世界一流的Web搜索引擎.为了完成这一宏伟的目标,nutch必须能够做到:
•每个月取几十亿网页。
•为这些网页维护一个索引。
•对索引文件进行每秒上千次的搜索。
•提供高质量的搜索结果。
•以最小的成本运作。
这将是一个巨大的挑战。
1.4nutchVSlucene
简单的说:
Lucene不是完整的应用程序,而是一个用于实现全文检索的软件库。
Nutch是一个应用程序,可以以Lucene为基础实现搜索引擎应用。
Lucene为Nutch提供了文本索引和搜索的API。
一个常见的问题是;
我应该使用Lucene还是Nutch?
最简单的回答是:
如果你不需要抓取数据的话,应该使用Lucene。
常见的应用场合是:
你有数据源,需要为这些数据提供一个搜索页面。
在这种情况下,最好的方式是直接从数据库中取出数据并用LuceneAPI建立索引。
2.nutch初体验
Nutch的爬虫有两种方式
•爬行企业内部网(Intranetcrawling):
针对少数网站进行,用crawl命令。
•爬行整个互联网:
使用低层的inject,generate,fetch和updatedb命令,具有更强的可控制性。
2.1局域网抓取
2.1.1配置nutch:
打开NUTCH的配置文件\nutch-1.0\conf,修改URL过滤规则文件“crawl-urlfilter.txt”,该文件以正则表达式来限定入口网站内哪些URL需要下载,修改内容如下:
#accepthostsinMY.DOMAIN.NAME
+^http:
//127.0.0.1:
8080/
打开NUTCH的配置文件nutch-1.0\conf\nutch-site.xml找到属性为http.agent.name的属性项,修改VALUE值作为抓取网站的名称,修改内容如下:
<
property>
<
name>
http.agent.name<
/name>
value>
localweb<
/value>
description>
/description>
/property>
在\nutch-1.0\下新建一个weburls.txt,内容为“http:
8080/mmsadmin/”
2.1.2启动下载
基本配置文件完成只是更改了nutch网络蜘蛛的运行参数,并不能让网络蜘蛛自动运行起来,去完成下载工作,具体操作步骤如下:
(1)进入到nutch得根目录。
(2)输入bin/nutchcrawlweburls.txt-dirlocalweb-depth3-topN100-threads1后回车。
dir:
指定存放爬行结果的目录,本次结果存放在localweb目录中。
-depth3:
表面需要抓取页面深度为3层的内容。
-topN100:
指明只抓取每层前100个URL。
-thread1:
指定crawl只采取一个下载线程进行下载。
(3)爬行完后会在NUTCH根目录创建localweb目录,爬行过程得到的结果存放在这个目录中,默认情况系统会记录工作日志\nutch-1.0\logshadoop.log
(4)修改nutch-1.0\conf\nutch-site.xml文件,增加检索目录属性指定检索器读取的数据目录,修改内容如下
<
searcher.dir<
D:
\sinoyang\nutch-1.0\localweb<
(5)执行bin/nutchorg.apache.nutch.searcher.NutchBeanXX命令检索包含XX的网页
现在整个下载顺利完成了,需要注意的是,在执行crawl命令时,nutch目录下不能存在命令中使用的localweb目录,否则会报错
2.1.3下载流程解析
crawl命令调用injector把weburls.txt加入到数据库,调用generator生成数据段,启动fetcher线程实际下载网页。
crawldbupdate把网页内的链接加入到下载数据库,下载实例测试中,创建weburls.txt文件,存放下载的URL列表,下载过程中使用nutchcrawl命令,附带的参数是存放下载链的weburls.txt文件。
以dir引入的下载后存放的路径localweb,下载深度为-depth3,表面下载3层内容。
-topN100表面下载前100个页面后结束。
-thread1表示使用一个独立下载线程下载,整体命令如下
bin/nutchcrawlweburls.txt-dirlocalweb-depth3-topN100-threads1
nutch的局域网下载采用广度优先策略,先把二级页面抓取下来,然后进行第三级页面的抓取,超过3级的不会被抓取。
系统调用LinkDb建立网页间的链接关系,调用Indexer为每个数据段建立独立索引,调用mergingsegments把不同数据段合并为一个统一索引。
打开抓取程序自动建立的localweb目录,可以看到crawldb,segments等子目录,分别存放下载的数据。
Localweb目录下,包括5个文件夹,每个文件夹分别存放不同的内容。
Crawldb目录存放下载的URL,以及下载的日期,用来页面更新检查时间。
Linkdb目录存放URL的互联关系,是下载完成后分析得到的。
Segments:
存放抓取的页面,下面目录的个数也获取的页面层数有关系,通常没一层会创建一个独立目录。
子目录名称为时间,便于管理,每个子目录里有6个文件夹分别存放内容。
Content:
每个下载URL的状态
crawl_fetch:
每个下载URL的状态
crawl_generate:
等待下载URL集合
crawl_parse:
包含用来更新Crawldb的外部链接
parse_data:
包含每个URl解析出的外部链接和元数据
parse_text:
包含每个解析过的URL文本
indexes:
存放每次下载的独立索引目录
index:
符合luence格式的索引目录,是indexes里面所有index合并后的完整索引
2.2下载多个网站
局域网抓取过于简单,没有体现出网络蜘蛛在多个网站情况下是如何工作的,下面的任务将从多个互联网站点下载数据,建立索引。
多个站点的下载足以满足一个小型垂直搜索引擎的需求。
操作基本上与局域网下载相同,只是URL列表出现差别。
下面以下载汽车新闻报道的相关内容为例子。
(1)进入在\nutch-1.0\下新建一个multiurls.txt,内容为
(2)打开NUTCH的配置文件\nutch-1.0\conf,修改URL过滤规则文件“crawl-urlfilter.txt”,该文件以正则表达式来限定入口网站内哪些URL需要下载,修改内容如下:
+^
#skipeverythingelse
-.
执行bin/nutchcrawlmultiurls.txt-dirmultiweb-depth3-topN100-threads5
(3)等待几分钟,完成下载,同时建立索引。
(4)修改nutch-1.0\conf\nutch-site.xml文件,增加检索目录属性指定检索器读取的数据目录,修改内容如下
<
\sinoyang\nutch-1.0\multiweb<
(5)执行bin/nutchorg.apache.nutch.searcher.NutchBeanXX检索包含SUV的网页
(6)局域网,多网站的下载模式都是采用广度优先算法完成下载的,检索后得到的数据经过索引合并,可以通过统一的借口进行检索,得到每个网站内容,网页内容ianshi包括一定的排序次序。
局域网木偶师适合针对少数网站建立一个小型垂直搜索系统,也可以实现企业网站的站内检索系统,或针对某领域网站的内容检测系统。
2.3Nutch互联网抓取
Nutch的互联网抓取模式与局域网模式差别很大,局域网下载模式使用CRAWL命令,操作简单,但是也带来了限制,互联网模式使用了更底层的一系列命令,更灵活的控制手段。
2.3.1下载列表获取
全网爬行意指在整个互联网进行爬行,这通常需要多台服务器跑上几周的时间才能完成,这对于我们的测试而言是不必要的。
因此,我们现在所做的所谓"全网爬行",只是模拟一下。
nutch文档中是从DMOZ获取一个URL集合,然后取一个子集进行处理。
不过该文档有300多M,解压缩后接近2G,使用DmozParser工具可以从文件中随机抽取部分数据,生成文件列表,操作如下:
bin/nutchorg.apache.nutch.tools.DmozParsercontent.rdf.u8isubset3000>
dmozurls
命令执行结果是nutch根目录下生成dmozurls文件(文件也不小,有146M,有4446480个URl)该文件可以用来作为入口地址添加到下载库中。
由于dmozurls文件里面包含大量的国外网站,访问时候比较慢,所以采用另一种方式,将要测试的网站URl放入名为vipurls.txt中。
2.3.2下载大量网站
入口URL准备好以后,下一步就是导入NUTCH系统,完成下载工作具体操作如下
(1)进入在\nutch-1.0\下新建一个vipcrawl目录。
(2)复制vipurls.txt到nutch-1.0根目录,利用它向vipcrawl数据库里添加初始化URL,命令如下
bin/nutchinjectvipcrawl/crawldbvipcrawl.txt
(3)<
bookagent<
bookagent<
(4)利用crawldb中已经注入的URL下载列表,调用generate命令创建一个新的数据段,存放在vipcrawl目录下。
bin/nutchgeneratevipcrawl/crawldbvipcrawl/segments
(5)查看segments目录下最新生成的日期时间文件夹。
需要根据自己机器显示的最新目录,修改命令行中的目录参数。
根据文件夹下生成的下载列表获取页面内容
bin/nutchfetchvipcrawl/segments/20091217141251
(6)从已经下载的段数据里面获取URL链接,更新crawldb库里的内容。
bin/nutchupdatedbvipcrawl/crawldbvipcrawl/segments/20091217141251
(7)循环执行(4)(5)(6)下载页面,直到crawldb的列表完成或者全部达到网页深度,此处的深度控制需要通过循环次数来控制。
(8)调用analyze命令分析已经下载网页的内容
Bin/nutchupdatedvipcrawl/crawldbvipcrawl/segments/20091217141251
(9)根据webdb内容,修改分段的权值和外部链接
Bin/nutchupdatesegs
(10)索引页面内容
Bin/nutchindex
执行需要一定时间,具体时间由网络状况决定,完成以上命令组合之后,一个简化的互联网数据就下载完成了。
2.4Nutch结果检测
由于抓取的结果页面内容已经被分析处理,无法直观查看下载的网页内容。
最简单的方法是通过检索查看页面的关键词是否存在。
2.4.1网页内容检索
搜索的最终目标是为用户提供检索服务。
上一节的几种下载模式的下载过程,除了基本的网页获取操作,还调用了索引命令。
实际上几经完成了搜索引擎的整个检索准备工作。
我们把NUTCH根目录下的nutch-1.0.war文件放到TOMCAT服务器下,然后修改配置文件,指定索引路径。
启动TOMCAT,就可以在就可以运行了。
3.nutch基本原理分析
3.1nutch的基本组成
nutch作为一个搜索引擎,其基本组成也同其他搜索引擎一样。
简单的说,包括爬虫,索引和搜索三部分。
3.2nutch工作流程
在前面的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操作,实质上也是执行的以上一系列操作,这一点从它的抓取日志上可以看出)
4.nutch工作流程分析
4.1爬虫
5.1.1工作策略
其工作策略一般则可以分为累积式抓取(cumulativecrawling)和增量式抓取(incrementalcrawling)两种。
累积式抓取是指从某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。
在理想的软硬件环境下,经过足够的运行时间,累积式抓取的策略可以保证抓取到相当规模的网页集合。
但由于Web数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致。
与累积式抓取不同,增量式抓取是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。
进行增量式抓取的前提是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息。
面向实际应用环境的网络蜘蛛设计中,通常既包括累积式抓取,也包括增量式抓取的策略。
累积式抓取一般用于数据集合的整体建立或大规模更新阶段;
而增量式抓取则主要针对数据集合的日常维护与即时更新。
在确定了抓取策略之后,如何从充分利用网络带宽,合理确定网页数据更新的时间点就成了网络蜘蛛运行策略中的核心问题。
总体而言,在合理利用软硬件资源进行针对网络数据的即时抓取方面,已经形成了相对比较成熟的技术和实用性解决方案,这方面目前所需解决的主要问题,是如何更好的处理动态网络数据问题(如数量越来越庞大的Web2.0数据等),以及更好的根据网页质量修正抓取策略的问题。
5.1.2工作流程分析
初始URL集的建立有两种方式:
超链接和站长提交
超链接:
机器人程序根据网页链到其他网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始,
连到数据库上所有到其他网页的链接