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

本文详细介绍了开源搜索引擎Nutch的安装步骤、配置方法以及如何使用shell脚本运行Nutch爬虫。通过配置URL过滤器和代理,设置爬行深度、线程数,了解如何生成和查看爬取数据,以及如何将Nutch命令整合到shell脚本中,便于自动化执行。
摘要由CSDN通过智能技术生成

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文件中进行配置,配置如下:

<property>

  <name>http.proxy.host</name>

  <value>10.217.130.20</value>

  <description>The proxy hostname.  If empty, no proxy is used.</description>

</property>

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

详细内容如下:

<?xml version="1.0"?>

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

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

<configuration>

<property>

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

  <value>MyNutch</value>

  <description>test

  </description>

</property>

 <property>

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

  <value>spider</value>

  <description> spider

  </description>

</property>

 <property>

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

  <value>http://www.xxx.com </value>

  <description>http://www.xxx.com

  </description>

</property>

 <property>

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

  <value>MyEmail</value>

  <description>md.peter@163.com

  </description>

</property>

<property><name>http.timeout</name><value>80000</value></property>

<property><name>http.max.delays</name><value>1000</value></property> 

</configuration>

 

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/

 

 

 

<p>Nutch的创始人是Doug Cutting,他同时也是Lucene、Hadoop和Avro开源项目的创始人。</p><p>Nutch诞生于2002年8月,是Apache旗下的一个用Java实现的开源搜索引擎项目,自Nutch1.2版本之后,Nutch已经从搜索引擎演化为网络爬虫,接着Nutch进一步演化为两大分支版本:1.X和2.X,这两大分支最大的区别在于2.X对底层的数据存储进行了抽象以支持各种底层存储技术。</p><p>在Nutch的进化过程中,产生了Hadoop、Tika、Gora和Crawler Commons四个Java开源项目。如今这四个项目都发展迅速,极其火爆,尤其是Hadoop,其已成为大规模数据处理的事实上的标准。Tika使用多种现有的开源内容解析项目来实现从多种格式的文件中提取元数据和结构化文本,Gora支持把大数据持久化到多种存储实现,Crawler Commons是一个通用的网络爬虫组件。</p><p>大数据这个术语最早的引用可追溯到Nutch。当时,大数据用来描述为更新网络搜索索引需要同时进行批量处理或分析的大量数据集。现在,大数据的含义已经被极大地发展了,业界将大数据的特性归纳为4个“V”。Volume数据体量巨大,Variety数据类型繁多,Value价值密度低,商业价值高,Velocity处理速度快。</p><p>Hadoop是大数据的核心技术之一,而Nutch集Hadoop之大成,是Hadoop的源头。学习Hadoop,没有数据怎么办?用Nutch抓!学了Hadoop的Map Reduce以及HDFS,没有实用案例怎么办?学习NutchNutch的很多代码是用Map Reduce和HDFS写的,哪里还能找到比Nutch更好的Hadoop应用案例呢?</p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值