`
wind_bell
  • 浏览: 291936 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

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

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

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

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

Nutch程序采用Java语言编写,其运行环境需要一个Tomcat容器。本文运行环境以最新的j2sdk1.4.2_12及jakarta-tomcat-5.0.28为例。

使用Nutch进行数据抓取

Nutch通过运行网络爬虫工具进行网络内容的抓取,它提供了爬行企业内部网与爬行整个互联网这两种方式。

● 爬行企业内部网

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

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

#cd /usr/local/nutch

#mkdir urls

#touch urls/sohu

因此文件urls/sohu的内容为:http://www.sohu.com/。依据爬行网站的实际情况,可继续在此文件末尾添加其他URL或者在URL目录里添加其他包含URL的文件。需要注意的是,在Nutch0.7的版中不需要创建目录,直接创建包含起始根URL的文件即可。

接下来,要编辑conf/crawl-urlfilter.txt文件,将文中MY.DOMAIN.NAME部分替换为准备爬行的域名,并去掉前面的注释。因此在本文中进行域名替换后的形式为:

+^http://([a-z0-9]*\.)*sohu.com/

文件conf/crawl-urlfilter.txt主要用于限定爬行的URL形式,其中URL的形式使用正则表达式进行描述。

然后,编辑文件conf/nutch-site.xml,并且必须包含以下内容:

< ?xml version="1.0"?>

< ?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!---->

< configuration>

< property>

< name>http.agent.name< /name>

< value>sohu.com< /value>

< description>sohu.com< /description>

< /property>

< /configuration>

除http.agent.name外,在< configuration> < /configuration>间一般还包括http.agent.description、http.agent.url、http.agent.email这三个选项。

最后,开始爬行抓取。完成对Nutch的配置后,运行crawal命令进行爬行。在本文中爬行脚本为:

#bin/nutch crawl urls -dir sohu -depth 5 -topN 1000

其中命令行中各参数项含义分别为:dir指定爬行结果的存放目录,此处dir为sohu;depth指定从根URL起将要爬行的深度,此例depth设定为5;N设定每一层爬行靠前的N个URL,此例N值设定为1000。另外,crawl还有一个参数项:threads,它设定并行爬行的进程数。在爬行过程中,可通过Nutch日志文件查看爬行的进展状态,爬行完成后结果存放在sohu目录里。

● 爬行整个互联网

爬行整个互联网(Whole-web crawling)是一种大规模网络爬行,与第一种爬行方式相对,具有更强的控制性,使用inject、generate、fetch、updatedb等比较低层次的命令,爬行量大,可能需要数台机器数周才能完成。

首先,需要下载一个包含海量URL的文件。下载完成后,将其拷贝到Nutch主目录,并且解压缩文件。

wget http://rdf.dmoz.org/rdf/content.rdf.u8.gz

#cd /usr/local/nutch

#cp /home/zyhua/content.rdf.u8.gz .

#gunzip content.rdf.u8.gz

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

#mkdir urls

#bin/nutch org.apache.nutch.tools.DmozParser content.rdf.u8 -subset 50000 > urls/urllist

采用Nutch的inject命令将这些URL添加crawldb中。这里,目录crawl是爬行数据存储的根目录。

#bin/nutch inject crawl/crawldb urls

然后,编辑文件conf/nutch-site.xml,内容及方法与“爬行企业内部网”类似,此处略过。接着,开始爬行抓取。可以将整个爬行抓取的命令写成一个shell脚本,每次抓取只需执行此脚本即可,即生成→抓取→更新的过程。根据需要可反复运行此脚本进行爬行抓取。脚本范例及相应的说明如下:

#!/bin/sh

bin/nutch generate crawl/crawldb crawl/segments

lastseg=`ls -d crawl/segments/2* | tail -1`

echo $lastseg

bin/nutch fetch $lastseg

bin/nutch updatedb crawl/crawldb $lastseg

#chmod u+x crawl //使其可执行。

#./crawl //运行脚本开始爬行抓取。

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

#bin/nutch invertlinks crawl/linkdb crawl/segments/* //倒置所有链接

#bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb crawl/segments/*

使用Nutch进行数据搜索

Nutch为用户提供了友好的搜索界面,它需要一个servlet容器来提供服务,本文选用了开源的Tomcat容器。首先,将Nutch的war文件部署到Tomcat容器里。

#rm -rf $CATALINA_HOME/webapps/ROOT*

#cp /usr/local/nutch/nutch*.war $CATALINA_HOME/webapps/ROOT.war

启动Tomcat,它会自动解开war文件。

#$CATALINA_HOME/bin/catalina.sh start

修改文件nutch-site.xml,指定Nutch的数据存放目录。增加以下内容到文件nutch-site.xml中。

< configuration>

<property></property>

< name>searcher.dir< /name>

< value>/usr/local/nutch/sohu< /value>

< /property>

< /configuration>

//在第二种爬行方法中的值为/usr/local/nutch/crawl。

修改server.xml,使输入中文进行搜索时不出现乱码现象。将以下内容添加到server.xml文件适当的地方。

URIEncoding=”UTF-8” useBodyEncodingForURI=”true”

配置更改完成后,重启Tomcat服务器。

#$CATALINA_HOME/bin/catalina.sh stop

#$CATALINA_HOME/bin/catalina.sh start

Nutch的运行维护

随着Internet上网页的不断更新,企业网站数量的不断增加,需要定期进行爬行抓取,保证搜索结果的准备性与时效性。因此Nutch的运行与维护主要集中在对已有数据的增添与更新上,具体包括了爬行、索引及数据的合并等操作。主要有以下两种典型情况。

● 重爬行抓取

重爬行抓取的作用主要表现在两个方面,一方面是对已有内容进行更新,另一方面是发现新的内容。Nutch的Wiki网站提供的重爬行的完整脚本,其链接为:

http://wiki.apache.org/nutch/IntranetRecrawl

该链接提供了Nutch.0.7及Nutch0.8两种版本的重爬行脚本。将脚本内容保存为文件/usr/local/nutch/bin/recrawl,便可执行,运行脚本进行重爬行。

#chmod u+x bin/recrawl

#/usr/local/nutch/bin/recrawl servlet_path crawl_dir depth adddays [topN]

//请务必使用recrawl的绝对路径运行此脚本。

recrawl的工作过程包括以下四步:基于“生成→抓取→更新→循环”的数据爬行抓取;segments的合并及无用内容的剔除;重索引及重复内容的剔除;在Tomcat容器中重载应用程序配置。

使用Cron定期进行重爬行抓取,将如下内容添加到文件/etc/crontab末尾重启Cron即可。

00 01 * * 6 root /usr/local/nutch/bin/recrawl

#每周六凌晨01:00进行重爬行抓取。仅供参考。

● 新增URL后的爬行抓取

主要针对第一种爬行方式,用于解决新增URL时的爬行问题。主要包括以下几步:对新增URL的爬行抓取;新数据与已有数据的合并;重载应用程序配置。对新增URL的爬行方式与旧URLs的爬行方式相同。Nutch的Wiki网站同样提供了进行数据合并的脚本代码,链接为:

http://wiki.apache.org/nutch/MergeCrawl

将其保存为文件/usr/local/nutch/bin/mergecrawl,使可执行,进行数据合并。

#chmod u+x bin/mergecrawl

#bin/mergecrawl merge_dir dir1 dir2 ...

修改$CATALINA_HOME/webapps/ROOT/WEB-INF/classes/nutch-site.xml文件中searcher.dir属性的值为新目录名。在Tomcat服务器中重载应用程序配置。

#touch $CATALINA_HOME/webapps/ROOT/WEB-INF/web.xml

分享到:
评论
1 楼 koubi1986 2013-08-20  
你好!请教一些问题:
请问一下
1。你是如何把nutch抓取到的二进制内容,在项目中读取的。
2。nutch抓取时候,发现有很多url没有被成功抓取过来,请问你做的时候,有什么   办法是提高成功率。
3。对抓取过来内容你们是如何进行关键词搜索

希望群主可以帮忙解答一下。万分感激!
email:83132614@qq.com

相关推荐

    nutch 初学文档教材

    8. nutch应用.45 8.1 修改源码.....45 8.2 插件机制---plugin........45 8.2.1 什么是plugin......45 8.2.2 使用plugin的好处.......45 8.2.3 plugin工作原理...46 8.2.4 编写plugin47 8.3 API接口.......53 8.3.1...

    开发基于 Nutch 的集群式搜索引擎

    为了更好地理解Nutch的实际应用场景,我们可以通过以下步骤开发一个简单的Nutch应用: 1. **开发目标网站**:首先,使用Rational Application Developer (RAD) v6.0开发一个目标网站应用。该应用会被部署在一个名为...

    nutch入门教程

    这包括下载Tomcat,设置CATALINA_HOME环境变量,以及配置Tomcat的server.xml文件以支持Nutch应用。 #### 3. Nutch初体验 **3.1 爬行企业内部网** 初次使用Nutch时,可以先尝试爬行企业内部网络,熟悉Nutch的抓取...

    nutch1.2 java的project

    5. **链接分析**:Nutch应用链接流行度算法(如PageRank)对网页进行排名,提高搜索结果的相关性。 6. **索引**:抓取的网页内容会通过Apache Lucene库进行索引,以便快速搜索。 7. **插件系统**:Nutch支持插件...

    apache-nutch

    在实际应用中,Apache Nutch 通常与Apache Solr、Hadoop等组件一起工作,构建完整的数据获取、处理、存储和搜索的解决方案,满足各种大规模信息处理需求。通过不断优化和定制,Nutch 可以成为企业级大数据处理的重要...

    Nutch入门教程

    Nutch应用章节讨论了修改源码、插件机制、API接口以及Nutch的应用前景。特别是插件机制(plugin),说明了什么是plugin,使用plugin的好处、工作原理和编写方法。 11. 结语 文章最后还提供了Nutch的相关网站和参考...

    Nutch入门.rar

    8. nutch应用.45 8.1 修改源码.....45 8.2 插件机制---plugin........45 8.2.1 什么是plugin......45 8.2.2 使用plugin的好处.......45 8.2.3 plugin工作原理...46 8.2.4 编写plugin47 8.3 API接口.......53 ...

    nutch1.6压缩代码

    4. **链接分析**:Nutch 应用了PageRank算法进行链接分析,通过网页之间的链接关系计算每个页面的重要性。 5. **文本解析与索引**:Nutch 内置了HTML解析器,可以将网页内容提取出来,进行关键词抽取和分词,然后...

    nutch中文分词

    nutch应用,nutch中文分词,nutch中文乱码

    nutch入门实例教程.pdf

    - **应用前景**: 探讨 Nutch 在不同领域的应用潜力和发展方向。 #### 结论 通过上述知识点的总结可以看出,Nutch 不仅是一个强大的搜索引擎框架,而且还是一个非常适合教学和研究的平台。无论是对于希望深入了解...

    Nutch搜索引擎·Nutch简单应用(第3期)

    而Nutch的简单应用则体现在用户如何利用Nutch提供的这些命令和配置选项,根据自己的需求来抓取和索引网络上的数据。例如,用户可以针对一个特定的URL列表,设置爬取深度和线程数来获取网站内容,并将这些内容索引后...

    nutch入门学习

    nutch应用 **7.1 修改源码**:Nutch的源码是开放的,用户可以根据需要修改和扩展功能。 **7.2 插件机制---plugin** - **什么是plugin**:Nutch支持插件机制,允许用户自定义爬虫、索引器和搜索模块的行为。 - **...

    Nutch配置[汇编].pdf

    - **部署Nutch应用**:将`nutch-1.2.war`文件复制到Tomcat的`webapps`目录下。 ##### 2. **配置Tomcat** - **文件路径**:`E:\Tomcat\webapps\nutch\WEB-INF\classes\nutch-site.xml`。 - **添加配置项**: ```...

    Lucene+nutch开发自己的搜索引擎 part2

    5. **链接分析**:Nutch应用PageRank或其他链接权重算法,评估网页的重要性,优化抓取顺序。 6. **与Solr或Elasticsearch集成**:Nutch抓取的网页数据可以导入到Solr或Elasticsearch中,提供更高级的搜索功能和界面...

    基于Apache Nutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件.zip

    4. **链接分析**:Nutch应用PageRank算法进行链接分析,评估页面的重要性。 5. **索引与搜索**:抓取的网页会被转化为可搜索的索引,用户可以通过Nutch的搜索接口查询。 **Htmlunit的介绍** Htmlunit是一个功能强大...

    nutch-web-api:用于 Apache Nutch 抓取应用程序的 RESTFul API

    nutch-web-api是 Apache Nutch 爬虫应用程序的 RESTFul API 实现。 这个项目完全是用 node.js 和 coffeescript 编写的,目的是简化使用并提高灵活性。 REST API 不是 apache nutch 应用程序的替代品,它只是为 nutch...

    eclipse配置nutch,eclipse配置nutch

    在IT领域,Apache Nutch是一款开源的Web爬虫...这不仅为学习和研究Nutch提供了便利,也为实际应用中的数据采集和分析打下了坚实的基础。记住,配置过程中遇到任何问题,都可以查阅官方文档或社区论坛,寻求解决方案。

Global site tag (gtag.js) - Google Analytics