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


<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>[email protected]

</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/

时间: 2024-11-09 13:02:31

Nutch爬虫安装向导与命令详解的相关文章

YUM安装调试以及命令详解

背景,需要安装cacti,google了很多安装资料,需要先yum安装一些准备lib包,比如snmp以及openssl等等. [[email protected] ~]# yum install net-snmp-devel Loaded plugins: rhnplugin, security This system is not registered with RHN. RHN support will be disabled. Setting up Install Process No p

Git 安装使用以及命令详解

一.简介及下载安装 Git是目前世界上最先进的分布式版本控制系统 作者 Linus Torvalds(林纳斯·托瓦兹) 关于git的发展史感兴趣可以自行百度,这里不再详细描述,接下来直接开撸 下载地址:https://git-scm.com/downloads 下载对应os版本等即可 按照提示选择默认配置下一步,完成即可. 二.本地仓库配置及相关操作 安装完成后,还需要最后一步设置,在命令行输入如下: [email protected] MINGW32 /e/git-home/home1$ gi

bash数组和字符串处理、yum命令详解及编译安装

8月22号主要内容: 一.bash中的数组 二.bash中字符串处理 三.高级变量及配置用户环境 四.yum详解 五.编译安装 一.bash中的数组 1.数组的组成和申明 (1) 数组:存储多个元素的连续的内存空间,相当于多个变量的 集合. (2) 组成:数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式 ,即为关联索引,bash4.0版本之后开始支持. bash的数组支持稀疏格式(索引不连续) (3) 申明数组: declare -a ARRAY

RPM命令详解(安装、升级、卸载)

RPM命令详解(安装.升级.卸载) rpm 常用命令1.安装一个包# rpm -ivh 2.升级一个包# rpm -Uvh 3.卸载一个包# rpm -e 4.安装参数--force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装. 5.查询一个包是否被安装# rpm -q < rpm package name> 6.得到被安装的包的信息# rpm -qi < rpm package name> 7.列出该包中有哪些文

Linux/CentOS 服务安装/卸载,开机启动chkconfig命令详解|如何让MySQL、Apache开机启动?

chkconfig chkconfig在命令行操作时会经常用到.它可以方便地设置和查询不同运行级上的系统服务.这个可要好好掌握,用熟练之后,就可以轻轻松松的管理好你的启动服务了. 注:谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 语法: chkconfig       [--add]      [--del]     [--list]      [系统服务] chkconfig       [--level/levels]      [等级代号]     

run命令详解

1.gpedit.msc-----组策略 2.utilman--------辅助工具管理器 3. Nslookup-------IP地址侦测器 4. explorer-------打开资源管理器 5. logoff---------注销命令 6. tsshutdn-------60秒倒计时关机命令 7. lusrmgr.msc----本机用户和组 8. services.msc--- 本地服务设置 9. oobe/msoobe /a----检查XP是否激活 10. notepad--------

jar打包命令详解

:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是说,制作一个可执行的 JAR 文件包,就可以像.chm 文档一样双击运行了:而另一种回答,则是使用 JET 来进行编译.但是 JET 是要用钱买的,而且,据说 JET 也不是能把所有的 Java 程序都编译成执行文件,性能也要打些折扣.所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性.先来看看什么是 JAR 文件包: 1. JAR 文件包 JAR 文件就是 Java Archi

iftop命令命令详解

iftop命令命令详解 作者:尹正杰 在Linux命令中有很多内置命令,和外置命令,但是内部命令的功能毕竟是有限的,比如ifconfig,它就不能看到网卡流量的 实时发送情况,尽管咱们知道可以用watch命令去查看网卡的发送接收流量的情况,但是还是不够细致,因为它仅仅能看到我们的 接受和发送的总流量,因此,我们今天来介绍一个比较好使的实施查看网络流量信息的软件---iftop,其实他的工作模式和top很像. 废话不多说~让我们直接进入正题吧: 1.想必大家都会在linux命令行上敲击ifconf

linux yum命令详解

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至全部软件包的命令,而且命令简洁而又好记. yum的命令形式一般是如下:yum [options] [command] [package ...]其中的[opti