Nutch 使用总结.docx

上传人:b****5 文档编号:5039864 上传时间:2022-12-12 格式:DOCX 页数:11 大小:24.84KB
下载 相关 举报
Nutch 使用总结.docx_第1页
第1页 / 共11页
Nutch 使用总结.docx_第2页
第2页 / 共11页
Nutch 使用总结.docx_第3页
第3页 / 共11页
Nutch 使用总结.docx_第4页
第4页 / 共11页
Nutch 使用总结.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Nutch 使用总结.docx

《Nutch 使用总结.docx》由会员分享,可在线阅读,更多相关《Nutch 使用总结.docx(11页珍藏版)》请在冰豆网上搜索。

Nutch 使用总结.docx

Nutch使用总结

Nutch 是一个开源Java 实现的搜索引擎。

它提供了我们运行自己的搜索引擎所需的全部工具。

包括全文搜索和Web爬虫。

 Nutch使用方法简介:

 

nutch1.2eclipsetomcat6.0配置:

Nutch实战:

介绍了开源搜索引擎Nutch的基本信息,详细说明了在Eclispe下运行Nutch的步骤和需要注意的问题,还分析了部分源代码。

很好的文章

Nutch目录结构

bin:

用于命令行运行的文件;

conf:

Nutch的配置文件

lib:

一些运行所需要的jar文件;

plugins:

存放相应的插件;

src:

Nutch的所有源文件;

webapps:

web运行相关文件;

nutch-0.9.war是Nutch所提供的基于Tomcat的应用程序包。

Nutch工作流程

1.将起始URL集合注入到Nutch系统之中。

2.生成片段文件,其中包含了将要抓取的URL地址。

3.根据URL地址在互联网上抓取相应的内容。

4.解析所抓取到的网页,并分析其中的文本和数据。

5.根据新抓取的网页中的URL集合来更新起始URL集合,并再次进行抓取。

6.同时,对抓取到的网页内容建立索引,生成索引文件存放在系统之中。

 

(1)准备需要的软件列表

       Cygwin    (下载地址:

       Jdk(1.4.2以上版本,下载地址

       Nutch(推荐使用0.9版本,下载地址http:

//www.apache.org/dyn/closer.cgi/lucene/nutch/)

       Tomcat(下载地址http:

//tomcat.apache.org/)

(2)安装软件

    1) Cygwin打开安装程序Cygwin.exe后,在"ChooseInstallationType"页选择"InstallfromInternet"(如果你已经把全部安装包下载到本地,就可以选择"Installfromlocaldirectory"选项)。

然后点击"Next".

         然后选择安装目录,其他可保持默认选项,点击"Next".

         选择保存安装包的本地目录,点击"Next".

         选择下载连接的类型,点击Next。

         然后通过服务器先下在需要安装的包列表,改为install比较合适,默认为default安装不全

         完成安装。

          图文讲解 

    2) 安装JDK ,注意安装完成后需要在Windows的环境变量中加入JAVA_HOME=你的jdk的安装目录

    3)安装Tomcat,下载安装版。

    4)把Nutch解压到本地目录,例如D:

/nutch。

启动Cygwin程序,Cygwin程序会启动一个模拟Unix/Linux的终端窗口,然后使用方式就和Unix的Shell一样了,Cygwin的根目录是/cygdriver,这个目录相当于Windows的“我的电脑”,然后进入Nutch的目录,例如:

cd/cygdriver/d/nutch,然后运行bin/nutch命令,如果出现下面的Usage信息,这样Nutch就安装完成了,非常简单。

     注意cygwin路径的切换方法:

    命令:

cdd:

/nutch

(3)使用Nutch

Nutch 的爬虫有两种方式 

• 爬行企业内部网(Intranetcrawling)。

针对少数网站进行,用crawl命令。

   

• 爬行整个互联网。

 使用低层的inject,generate,fetch和updatedb命令,具有更强的可控制性。

 

     1)添加需要爬行的内部网地址信息。

        新建一个目录,写入一些网址信息,例如我们需要爬行csdn的内部网。

            mkdirurls

            echo>urls/csdn   后面有斜线

    2)然后修改conf目录下的crawl-urlfilter.txt文件,这个文件中的正则表达式定义了那些文件可以被Nutch爬行,那些不可以被爬行。

其中以“+”号开头的表示属于Nuch合法的Url连接,“-”号开头相反。

我们需要修改文件中的

         #accepthostsinMY.DOMAIN.NAME

          +^http:

//([a-z0-9]*/.)*MY.DOMAIN.NAME/

        为

       #accepthostsinMY.DOMAIN.NAME

       +^http:

//([a-z0-9]*/.)*     

#accepthostsinMY.DOMAIN.NAME

+^http:

//([a-z0-9]*\.)*

     3)接下来我们需要配置conf/nutch-site.xml,这个需要填写相关的代理属性,应为Nutch也许要准受Robot协议,在爬行人家网站的时候,把相关的信息提交给被爬行的网站。

        我们在这个文件中,需要在之间,加入是个代理属性,例如http.agent.name属性      

        

        http.agent.name

        nutch-1.2

        

        

       其中除了name字段需要准确添写外,其他value和descrption字段可或添写。

同样,还需要加入http.agent.description,http.agent.url和http.agent.email这三个属性。

例如

[xhtml] viewplaincopy

1.

xml version="1.0"?

>  

2.

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

>  

3.

-- Put site-specific property overrides in this file. -->  

4.  

5.  

6.  http.agent.name  

7.  nutch-1.2  

8.  tjt  

9.  

10.  

11.  http.robots.403.allow  

12.  true  

13.    

14.  

15.  

16.  http.agent.description  

17.  tjtnutchhoho  

18.    

19.  

20.  

21.  http.agent.url  

22.    

23.    

24.  

25.  

26.  http.agent.email  

27.  tangjiutao@  

28.    

29.  

30.  

31.  http.agent.version  

32.  Nutch-1.2  

33.    

34.  

35.

-- file properties -->  

36.  

37.searcher.dir  

38.E:

/nutch/csdn  

39.  

40.  

41.  

 

这里的设置,是因为nutch遵守了robots协议,在获取response时,把自己的相关信息提交给被爬行的网站,以供识别。

      4)这样就完成了全部爬行所需要的配置,下面就可以用nutch的crawl命令来派性企业内部网了

       再nutch目录中输入:

       bin/nutchcrawlurls-dircsdn-threads4-depth2-topN30

       这样nutch就启动并且开始爬行任务了,由于是简单示例,所以以上这个命令很快就结束了,因为爬行的广度和深度都非常小,也就是说,示例只爬行了csdn网站的很小一部分网页。

      下面就上面命令的参数进行说明:

       Crawl命令的使用说明为:

crawl[-dirindex][-threadsnum][-depthnum][-topNnum]

       其中:

          urls是存放需要爬行网址的文件夹目录。

          -dir选项是抓取的页面的存放目录。

          -threads选项是启动的最大线程数。

          -depth选项是能爬行的最大深度,也就是最多爬行到第几级的页面,也叫爬行深度。

          -topN选项是在每层深度上,所能爬行的最多页面数,也称爬行广度。

      

       完成爬行后,会在-dir选项所指定的目录中保存网页信息和搜索需要的索引。

 

********************************************************

常见报错:

(1)Exceptioninthread"main"java.io.IOException:

Jobfailed!

       atorg.apache.hadoop.mapred.JobClient.runJob(JobClient.java:

1252)

       atorg.apache.nutch.crawl.Injector.inject(Injector.java:

217)

       atorg.apache.nutch.crawl.Crawl.main(Crawl.java:

124)

请检查nutch-default.xml的plugin.folders是否修改为./src/plugin,默认为plugins,修改后启动正常

(2)org.apache.nutch.plugin.PluginRuntimeException:

java.lang.ClassNotFoundException:

.urlnormalizer.basic.BasicURLNormalizer

********************************************************

PDF支持:

默认情况下不支持对pdf文件的索引,要想对pdf文件也进行正确的索上,找到nutch-default.xml中的plugin.includes属性,添加上pdf,即为parse-(text|html|js|pdf)。

 

Nutch的爬行结果目录

爬行结果目录含有segment,linkdb,indexes,index,crawldb文件夹

Nutch的数据文件

crawldb:

爬行数据库,用来存储所要爬行的网址

linkdb:

链接数据库,用来存储每个网址的链接地址,包括源地址和链接地址

segments:

抓取的网址被作为一个单元,而一个segment就是一个单元。

一个segment包括以下子目录:

        crawl_generate:

包含所抓取的网址列表

       crawl_fetch:

包含每个抓取页面的状态

       content:

包含每个抓取页面的内容

       parse_text:

包含每个抓取页面的解析文本

       parse_data:

包含每个页面的外部链接和元数据

       crawl_parse:

包含网址的外部链接地址,用于更新crawldb数据库

indexes:

采用Lucene的格式建立索引集

index:

最终生成的目录

WebDB内存储了两种实体的信息:

page和link。

Page实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。

Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。

同样的,Link实体描述的是两个page实体之间的链接关系。

WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。

  一次爬行中每次循环都会产生一个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。

Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segment。

Segment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。

在存储中。

Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。

  Index是Crawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。

Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。

但是需要注意的是,Lucene中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的segment只是WebDB中各个部分网页的内容和索引,最后通过其生成的index跟这些segment已经毫无关系了。

 

Nutch之Crawler工作流程

在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。

这些子操作Nutch都提供了子命令行可以单独进行调用。

下面就是这些子操作的功能描述以及命令行,命令行在括号中。

1)建立初始URL集 

2)将URL集注入crawldb数据库---inject 

3)根据crawldb数据库创建抓取列表---generate 

4)执行抓取,获取网页信息---fetch 

5)更新数据库,把获取到的页面信息存入数据库中---updatedb 

6)重复进行3~5的步骤,直到预先设定的抓取深度。

---这个循环过程被称为“产生/抓取/更新”循环 

7) 根据sengments的内容更新linkdb数据库---invertlinks 

8) 建立索引---index

9)在索引中丢弃有重复内容的网页和重复的URLs(dedup).

10)将segments中的索引进行合并生成用于检索的最终index(merge). 

11) 用户通过用户接口进行查询操作 

12)将用户查询转化为lucene查询 

13)返回结果 

其中,1~6属于爬虫部分;7~10属于索引部分;11~13属于查询部分。

 在创建一个WebDB之后,“产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。

当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。

在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。

最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。

  其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?

原因在于抓取的更新。

比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。

 

Nutch本身的搜索测试:

在cygwin中输入”bin/nutchorg.apache.nutch.searcher.NutchBeancsdn”,即调用NutchBean的main方法搜索关键字”csdn”,在cygwin可以看到搜索出:

Totalhits:

29(hits相当于JDBC的results)

注意:

如果发现搜索结果始终为0 ,则需要配置一下nutch-1.2/conf的nutch-site.xml  试试添加下面这段:

(注意之前的http.agent.name必须有,如果没有这个property,则搜索结果一直为0)

[xhtml] viewplaincopy

1.

-- file properties -->  

2.  

3.searcher.dir  

4.E:

/nutch/csdn  

5.  

6.  

 

使用Tomcat进行搜索测试  

(1)将nutch目录的nutch-1.0.war复制到tomcat/webapps下,可以改名为nutch以简化目录名,不改也可以

(2)启动tomcat,然后就在webapps下面自动生成了一个nutch的文件夹,

(3)打开nutch/WEB-INF/classes下的nutch-site.xml文件,改为以下内容

[xhtml] viewplaincopy

1.

xml version="1.0"?

>  

2.

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

>  

3.  

4.  

5.searcher.dir  

6.E:

/nutch/csdn  

7.  

8.  

9.  

 (4)启动Tomcat,打开浏览器在地址栏中输入:

http:

//localhost:

8080/nutch ,就可以看到搜索页面了.

注意:

从网页上复制的代码可能存在一些非英文编码字符,会造成影响,我就遇到了这个问题。

把前面的空格等都去掉就解决了。

 

nutch抓取下来,但搜索不到结果的解决方案

(1)在cygwin中输入”bin/nutchorg.apache.nutch.searcher.NutchBeancsdn”测试是否已经抓取了页面,如果有结果,则说明有

(2)查看tomcat的webapps/nutch/WEB-INF/classes下的nutch-site.xml文件里,是否设置了searcher.dir属性,这是必须的

(3)别忘了在设置完成后,要重启下tomcat。

(’?

ˆÓ每ŽŸ?

C‰ünutch-site.xml•¶Œ?

?

@“s—v?

d?

V启动tomcat?

j

(4)貌似nutch/conf/nutch-site.xml也要设置searcher.dir属性,都进行设置

 

中文乱码问题

在文本框中输入关键字,就可以进行搜索了.不过用户在使用时会发现,对于英文单词的搜索一切正常,而当要搜索中文词语时会出现乱码。

其实这个问题是Tomcat设置的问题,解决办法是修改tomcat的配置文件,打开tomcat/conf下的server.xml文件,将其中的Connector部分改成如下形式即可:

 

 

     

                connectionTimeout="20000"

                redirectPort="8443"/>

 

改为

 

     

                connectionTimeout="20000"

                redirectPort="8443"

            URIEncoding="UTF-8"

            useBodyEncodingForURI="true"/>

 

然后重启 tomcat 即可。

 

 

索引查看

LukeAll3.01打开爬行结果目录下的index目录

注意:

低版本Luke不能打开该文件,需要高版本的Luke,下载地址

 

Dedian同志翻译的DougCutting访谈录--关于搜索引擎的开发 。

http:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1