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>
< 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
- 大小: 43.1 KB
分享到:
相关推荐
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效检索。Nutch 是由 Apache Software Foundation 维护,它提供了完整的网络爬虫解决方案,包括数据采集、预处理、...
Apache Nutch 是一个开源的网络爬虫框架,用于构建大规模的全文搜索引擎。Nutch 1.9 是一个较旧但稳定的版本,相比2.x系列,它不需要依赖像HBase这样的非关系型数据库,因此在部署和维护上可能更加简单。这个压缩包 ...
Nutch在大数据处理领域具有广泛的应用,尤其在搜索引擎构建、数据分析和信息提取方面扮演着重要角色。该项目始于2004年,是Apache软件基金会的一部分,其目标是创建一个可扩展、高性能的Web爬虫系统。 Nutch的核心...
**Nutch搜索引擎配置详解** Nutch是一款开源的网络爬虫软件,主要用于收集、索引和搜索互联网上的数据。它在大数据领域中占有重要地位,尤其对于构建自定义搜索引擎的项目非常实用。Nutch的设计理念是模块化,允许...
### Nutch开源搜索引擎增量索引recrawl的终极解决办法续 #### 一、背景与问题概述 在前一篇文章中,我们探讨了Nutch开源搜索引擎在进行增量索引更新(recrawl)时遇到的问题及其初步解决方案。然而,在实际操作...
**Apache Nutch:亿级网页抓取与搜索引擎技术** Apache Nutch 是一个开源的网络爬虫框架,专门设计用于高效地抓取、索引和分析互联网上的海量数据。它基于Java开发,是Apache软件基金会的一个项目,具有高度可扩展...
总之,Nutch是一个强大的开源搜索引擎工具,它不仅适用于构建自己的搜索引擎,也是研究和学习搜索引擎技术的理想平台。通过熟悉其工作流程、分析源代码以及查阅相关文档,你将能够掌握搜索引擎的核心技术和实现细节...
通过学习Nutch,不仅可以了解搜索引擎的基本运作机制,还可以掌握Web抓取、信息处理和索引构建等相关技术,这对于从事信息检索、数据分析或者大数据处理等领域的工作非常有帮助。在实际操作中,可以根据项目需求定制...
例如,Nutch就是一款优秀的Java开源搜索引擎框架,它利用了Java的特性来实现高效的爬虫功能以及大规模的数据处理能力。 - **可移植性**:Java的“一次编写,到处运行”的特性使其能够在不同的操作系统上运行,这为...
Nutch 0.9 是一个历史悠久的开源搜索引擎项目,它主要关注网络爬虫和网页抓取方面的技术。这个版本在当时提供了稳定且功能强大的爬虫框架,被广泛用于数据采集和分析任务。以下是对 Nutch 0.9 版本的一些关键知识点...
Nutch是一个开源的搜索引擎框架,完全基于Java开发,旨在帮助用户构建和运行自己的搜索引擎。它提供了一系列的工具和服务,使用户能够从互联网上抓取、存储、索引以及搜索网页。 **1.2 研究Nutch的原因** 1. **...
Nutch作为一款开源搜索引擎框架,其功能涵盖网页抓取、索引构建以及查询处理。本文将以Nutch 1.2版本为核心,重点解析Crawl类及其在整体流程中的关键地位。 Nutch的工作流程主要包括以下几个阶段:注入(Injector)...
Nutch是一个开源的全文搜索引擎项目,它的主要目标是提供一个可扩展的、可靠的网络爬虫系统。Nutch的核心功能是抓取网页、解析HTML内容,并对抓取的数据进行索引和搜索。在这个文档中,我们将深入探讨Nutch的数据集...
Nutch 是一个强大的开源搜索引擎项目,它为网络爬虫、索引和搜索提供了一整套解决方案。这个名为 "nutch_recrawl_mergecrawl.rar" 的压缩包包含两个关键组件:`recrawl` 和 `mergecrawl`,它们分别针对索引更新和多...
《Lucene+Nutch:搜索引擎开发深度解析》一书的源码及详细说明是搜索引擎开发者和爱好者的重要参考资料。这本书深入探讨了如何使用Apache Lucene和Nutch构建一个完整的搜索引擎系统,涵盖了从网页抓取到索引建立,再...
Apache Nutch是一个开源的全文搜索引擎项目,它被广泛用于构建自定义的搜索引擎或爬虫解决方案。本教程将详细介绍如何搭建Nutch 1.2的Web开发环境,因为从Nutch 1.3版本开始,Web界面部分已被移除。 首先,我们需要...
Nutch 是一个基于 Java 的开源搜索引擎项目,它提供了构建和运行个人或组织搜索引擎所需的所有工具。通过 Nutch,用户不仅能够定制自己的搜索引擎,还能深入理解搜索引擎的工作原理和技术细节。 ##### 1.2 研究 ...
- **定义**: Nutch 是一个开源的 Java 实现的搜索引擎框架,它提供了构建和运行自己搜索引擎所需的所有工具。 - **研究动机**: - **透明度**: 作为开源项目,Nutch 的排序算法对所有人可见,这有助于理解其工作...