首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Nutch1.2搜索引擎运用详解

2012-07-03 
Nutch1.2搜索引擎使用详解Nutch作为一款刚刚诞生的开源Web搜索引擎,提供了除商业搜索引擎外的一种新的选择

Nutch1.2搜索引擎使用详解

Nutch作为一款刚刚诞生的开源Web搜索引擎,提供了除商业搜索引擎外的一种新的选择。个人、企业都可通过Nutch来构建适合于自身需要的搜索引擎平台,提供适合于自身的搜索服务,而不必完全被动接收商业搜索引擎的各种约束。

Nutch 是基于Lucene的。Lucene为 Nutch 提供了文本索引和搜索的API。如果你不需要抓取数据的话,应该使用Lucene。常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API建立索引。Nutch 适用于你无法直接获取数据库中的数据网站,或者比较分散的数据源的情况下使用。

Nutch的工作流程可以分为两个大的部分:抓取部分与搜索部分。抓取程序抓取页面并把抓取回来的数据进行反向索引,搜索程序则对反向索引进行搜索回答用户的请求,索引是联系这两者的纽带。下图是对Nutch整个工作流程的描述。


Nutch1.2搜索引擎运用详解

首先需要建立一个空的URL数据库,并且把起始根urls添加到URL数据库中(步骤1),依据URL数据库在新创建的segment中生成fetchlist,存放了待爬行的URLs(步骤2),根据fetchlist从Internet进行相关网页内容的爬行抓取与下载(步骤3),随后把这些抓取到的内容解析成文本与数据(步骤4),从中提取出新的网页链接URL,并对UR数据库进行更新(步骤5),重复步骤2-5直到达到被指定的爬行抓取深度。以上过程构成了Nutch的整个抓取过程,可以用一个循环来对其进行描述:生成→抓取→更新→循环。

当抓取过程完成后,对抓取到的网页进行反向索引,对重复的内容与URL进行剔除,然后对多个索引进行合并,为搜索建立统一的索引库,而后用户可通过由Tomcat容器提供的Nutch用户界面提交搜索请求,然后由Lucene对索引库进行查询,并返回搜索结果给用户,完成整个搜索过程。

一、爬行企业内部网(http://www.my400800.cn)

爬行企业内部网(Intranet Crawling)这种方式适合于针对一小撮Web服务器,并且网页数在百万以内的情况。它使用crawl命令进行网络爬行抓取。在进行爬行前,需要对Nutch进行一系列的配置,过程如下:

1、数据抓取:需要创建一个目录,并且在此目录中创建包含起始根URLs的文件。我们以爬行搜狐网站(http://www.sohu.com)为例进行讲述。

创建url文件列表

创建urls文件夹并打开urls文件夹,并在内部建立urls.txt文件,其内容为:http://www.sohu.com/。

依据爬行网站的实际情况,可继续在此文件末尾添加其他URL或者在URL目录里添加其他包含URL的文件。

修改conf/crawl-urlfilter.txt文件

文件conf/crawl-urlfilter.txt主要用于限定爬行的URL形式,其中URL的形式使用正则表达式进行描述。将文中MY.DOMAIN.NAME部分替换为准备爬行的域名,并去掉前面的注释。因此在本文中进行域名替换后的形式为:

开始爬行抓取

完成对Nutch的配置后,运行crawal命令进行爬行。

修改页面元素,屏蔽中文乱码

另外:在webapps\nutch\zh\include 下面新建header.jsp,内容就是复制header.html,但是前面加上:

同时在webapps\nutch\search.jsp里面,找到并修改为:

content.rdf.u8包含了约三百万个URL,在此仅随机抽取五万分之一的URL进行爬行。同第一种方法一样,首先需要建立包含起始根URL的文件及其父目录。

最后,进行索引。爬行抓取完后,需要对抓取回来的内容进行索引,以供搜索查询。过程如下:

#建立索引#bin/nutch invertlinks crawl/linkdb crawl/segments/* //倒置所有链接 #bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb crawl/segments/*

3、数据部署与查询:索引建立之后,便可以按照单网抓取的方式进行部署和查询了,其过程在此就不在一一介绍了。

?

?

nutch 手动抓取命令讲解

最近在研究nutch,找到了关于使用底层命令进行全网爬行的资料。

首先获得网址集,使用http://rdf.dmoz.org/rdf/ 目录下的content.example.txt 文件做测试,建立文件夹dmoz

命令:bin/nutch org.apache.nutch.tools.DmozParser content.example.txt >dmoz/urls

注射网址到crawldb数据库:

命令:bin/nutch inject crawl/crawldb dmoz

创建抓取列表:

命令:bin/nutch generate crawl/crawldb crawl/segments

把segments下的文件保存到变量s1中,供以后调用:

命令:s1=`ls -d crawl/segments/2* | tail -1`

命令:echo $s1

注`不是单引号,而是左上角跟~一个键位的那个

运行fetcher获取这些url信息:

命令:bin/nutch fetch $s1

更新数据库,把获取的页面信息存进数据库中:

命令:bin/nutch updatedb crawl/crawldb $s1

第一次抓取结束。

接下来选择分值排在前10的url来进行第二次和第三次抓取:

命令:bin/nutch generate crawl/crawldb crawl/segments -topN 10

命令:s2=`ls -d crawl/segments/2* | tail -1`

命令:echo $s2

命令:bin/nutch fetch $s2

命令:bin/nutch updatedb crawl/crawldb $s2

命令:bin/nutch generate crawl/crawldb crawl/segments -topN 10

命令:s3=`ls -d crawl/segments/2* | tail -1`

命令:echo $s3

命令:bin/nutch fetch $s3

命令:bin/nutch updatedb crawl/crawldb $s3

根据segments的内容更新linkdb数据库:

命令:bin/nutch invertlinks crawl/linkdb crawl/segments/*

建立索引:

命令:bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb crawl/segments/*

可以通过此命令进行查询:

命令:bin/nutch org.apache.nutch.searcher.NutchBean faq 此处的faq代表所要搜索的关键词

热点排行