Nutch爬虫安装向导与命令详解

Nutch介绍

Nutch是一个开源的用java实现的一个搜素引擎,它包含两个部分的内容:爬虫和搜索。

我们这里主要介绍nutch的爬虫部分,爬虫系统是由nutch爬虫工具Cralwer实现的,生成数据文件主要包括三类,分别是webdatabase,一系列的segment加上index,三者的物理文件分别存储在爬行结果目录下的db目录下webdb子文件夹内,segments文件夹和index文件夹。


Nutch安装

步骤1:从下面的网站中下载nutch包

http://lucene.apache.org/nutch

步骤2:在linux系统中解压nutch包(目前我用的版本1.2,不是最新的版本)

执行命令:tar zxvfapache-nutch-1.2-src.tar.gz

步骤3:为了方便我们可以更改解压后的nutch文件夹命名

执行命令:mv apache-nutch-1.2-srcnutch

步骤4:使用ant工具来编译执行nutch项目,确保你的机器上安装了ant,我们可以看到nutch目录下有个build.xml文件。

                执行命令:ant–buildfile build.xml

步骤5:测试nutch是否成功安装了,执行下面的命令

                bin/nutch


Nutch配置

1.       配置URL过滤器:

Nutch爬虫工具Crawler使用了过滤器来决定从哪些url中抓取数据。我们可以通过配置指定的正则表达式来限制爬行匹配的url模式,在conf/crawl-urlfilter.txt文件中进行配置。

以 http://www.aibang.com/ 为例配置如下:

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

2.      代理配置

有时候抓不到数据,发现是网络问题,需要设置代理,这时候我们可以在conf/nutch-default.xml文件中进行配置,配置如下:

  http.proxy.host

  10.217.130.20

  The proxy hostname.  If empty, no proxy is used.

我们还需要编辑conf/nutch-site.xml file文件,增加代理属性,并编辑相应的属性值。

详细内容如下:

  http.agent.name

  MyNutch

  test

 

 

  http.agent.description

  spider

  spider

 

 

  http.agent.url

  http://www.xxx.com

  http://www.xxx.com

 

 

  http.agent.email

  MyEmail

  [email protected]

 

http.timeout80000

http.max.delays1000 

 

Nutch命令

1.  你可以直接执行下面的抓取命令

bin/nutch crawl urls/url.txt -dir crawled -depth 2 -threads 4 -topN 10>&logs/log1.log

crawl:通知 nutch.jar,执行抓取的main方法

urls:  存放需要抓取的url的文件目录,需要抓取的url都写在了url.txt文件中

dir:  抓取命令执行完后,存放结果的命令

depth: 爬行的深度

threads:  处理的线程数

topN指在每层的深度上所要抓取的最大的页面数,完全抓取可设定为1万到100万,这取决于网站资源数量

 

2.  执行完crawl命令后,会生成一些数据文件,文件组成如下:

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

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

·        segments: 抓取的网址被作为一个单元,而一个segment就是一个单元。一个segments包括以下几个子目录:

¨      crawl_generate: 包含所抓取的网址列表

¨      crawl_fetch: 包含每个抓取页面的状态

¨      content: 包含每个抓取页面的内容

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

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

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

¨      indexes:  采用Lucene的格式建立索引集

 

3.      因为segment目录下的所有文件都是二进制文件,如果我们需要将其转换成我们可以知道的文件格式,可以使用nutch中提供的命令来查看。若需要获取网页的文本内容parse_data或parse_text,可以执行下面的命令

读segment的命令:

bin/nutch readseg -nocontent -noparsedata -dumpcrawled/segments/20150408144702 segdb

·        readseg:为nutch读segments目录中的内容的命令

·        -nocontent : 为可选参数 ,加上该参数后就不会导出content

·        -noparsedata:为可选参数,加上该参数后就不会导出parse_data

加上上面两个参数后就会只导出parse_text,也就是去除网页格式后的文本信息

·        crawled/segments/20150408144702: 为一个segment文件夹

·        segdb:为存放转换之后的内容的文件夹

执行完该命令后我们可以得到包含文本的dump文件。


写一个shell脚本来跑nutch

在我们的项目中,我们整合了所有的nutch命令在一个shell脚本中,这样远程方法可以通过直接调用执行该脚本来跑一个nutch job。

Shell脚本的部分内容如下所示:

$path/bin/nutch crawl $url -dir $crawled -depth $2 -threads 10 -topN $3 >&$log

if [ -d $crawled/segments ]; then

            mkdir $nutch_path/hdfs

            for file in $crawled/segments/*;

            do

            if [ -d $file ]; then

            $path/bin/nutch readseg -dump $file $nutch_path/segdb -nocontent -nofetch -nogenerate -noparse -noparsedata;

            cp $nutch_path/segdb/dump $nutch_path/segdb/$(date +%Y%m%d%H%M%S)

            fi

            done

            rm $nutch_path/segdb/dump

            cat $nutch_path/segdb/* > $nutch_path/hdfs/$destFileName

            hadoop fs -put $nutch_path/hdfs/* $hadoop_nutch_file_path/

            rm $nutch_path/segdb/*

            rm $nutch_path/hdfs/*

            rm -rf $nutch_path

fi

 

远程方法所需执行该脚本的命令如下:

Nohup sh  scriptName arg1 arg2 arg3 arg4 >/dev/null 2>log &

scriptName :你的脚本所在目录和名字

arg1: 你所需抓取的网页URL

arg2: depth

arg3: topN

arg4: timestamp, 这个将会作为nutch的id用来管理nutch job。

执行完上面的shell脚本后,将会生成一个Nutch_timestamp.txt的文件,该文件中包含所有网页中的文字信息,这个文件同样会上传到你所指定的hdfs文件系统中。


参考文献

1.     Nutch入门教程http://wenku.baidu.com/link?url=G_IMENzCfp5Wr07molR5PR5ToX9JJG6CPBeha1aQmk60EvyUir9ciQfY5aRsjyWHkPUuuTJjw-3ksmrjLG_OzOMaGH0ZcG_qsTwi9zORyG_

2.     Nutch官网http://nutch.apache.org/

 

 

 

你可能感兴趣的:(数据识别,数据清洗)