nutch学习笔记(一)入门篇

简介

  nutch是一个用java实现的网络爬虫,但却不仅仅是一个爬虫。它还囊括了网页分析,索引,搜索等功能,所白了,可以当做一个搜索引擎来用。nutch的意义在于,为普通开发人员提供了一扇研究搜索引擎的窗户,让搜索引擎不再神秘。而且,由于nutch的不断发展,对性能以及并行批处理的要求不断提供,hadoop诞生了。

 

安装(64位linux下):

环境准备

既然nutch是由java实现的,那么java就必须事先安装好。步骤如下:

下载jdk:jdk-xxx-linux-x64.tar.gz

解压到你想解压的目录下,如/usr/java

设置环境变量

vi /etc/profile

shift+g切到文件最末尾

插入以下语句:

JAVA_HOME=/usr/java/jdkxxx

CLASSPATH=.:/usr/java/jdk1.7.0_25/lib/dt.jar:/usr/java/jdk1.7.0_25/lib/tools.jar

PATH = $PATH:$JAVA_HOME/bin

export JAVA_HOME

export CLASSPATH

export PATH

 

1. 从二进制包中安装。

下载bin包,如:apache-nutch-1.x-bin.tar.gz

拷贝到你想安装的目录下,如: /usr/nutch/

解压该tar包:tar xzvf apache-xxxx

到此安装完成

 

2. 从源码编译安装。

下载apache-ant-xxx-bin.tar.gz

解压该tar包到/usr/ant目录

设置环境变量

(1). vi /etc/profile

(2). shift+g切换至文件末尾

(3). 插入ANT_HOME = /usr/ant/apache-ant-xxx

    PATH = $PATH:$ANT_HOME/bin

    export ANT_HOME

    export PATH

(4). wq保存退出

(5). source /etc/profile

(6). 终端重新登入

至此,编译工具ant就算安装完成,接下来就是编译安装nutch

下载nutch源码包apache-nutch-2.xx-src.tar.gz

解压到你想要的目录下,如/usr/nutch

输入命令: cd /usr/nutch/apache-nutch-2xx

输入命令: ant进行编译

等待一段时间(有点长,我在2g的虚拟机上编译了有30min),编译后,会在当前目录下生成一个runtime的目录,里面有编译好的可执行文件,jar包等等。

 

注:以下用$NUTCH_HOME代指nutch的安装根目录,如/usr/nutch/apache-nutch-2xx

 

简易爬取网页指南

1. 配置nutch-site.xml(在$NUTCH_HOME/conf/目录下)

  添加这么一段配置:

<property>
    <name>http.agent.name</name>
    <value>My Nutch Spider</value>
</property>

  以上配置设定了nutch在爬取网页时http消息头部中User-Agent字段。

 

2. 建立一个目录,向目录中的文件里添加需要爬取的页面url(即种子seed)

mkdir -p /data/testweb/urls

cd urls

touch first_url.txt

编辑first_url.txt,一行一个url即可,比如:

www.sina.com.cn

www.sohu.com

www.163.com

 

3. 开始爬取crawl

由于在nutch1.7之后,nutch crawl命令被废弃,所以如果需要用nutch进行爬取,就需要一步一步的建立爬取过程。过程如下:

1). 将需要爬取的url注入crawldb

./nutch inject /data/testweb/crawl/crawldb /data/testweb/url,crawldb目录下的文件由nutch产生,用于存储nutch将要爬取的url的信息,包括是否已经爬取,何时进行爬取。

2). 从crawldbdb中生成需要爬取的列表,即产生一个检索单元(爬取单元)

./nutch generate /data/testweb/crawl/crawldb /data/testweb/crawl/segments,该步骤运行成功后,会在segments目录下产生一个以当前日期时间为目录名的目录,比如20140707134833。segments下的文件(或目录)也由nutch产生,被视为一个检索单元,可用于分布式检索。segment目录包括了一下几个目录:

a. crawl_generate:定义将要检索的url集合(文件类型为SequenceFile)

b. crawl_fetch:存储每一个url的检索状态(文件类型为MapFile)

c. content:存储每一个url所对应的二进制字节流(文件类型为MapFile)

d. parse_text:存储每一个url所解析出的文本内容(文件类型为MapFile)

e. parse_data:存储每一个url所解析出的元数据(meta标签)(文件类型为MapFile)

f. crawl_parse:用于及时更新crawldb中的内容(如要检索的url已不存在等情况)--文件类型为SequenceFile

3). 进行爬取

./nutch fetch /data/testweb/crawl/segments/2014****,其中2014***是上一步generate后产生的segment list目录。

4). 对爬取后的结果进行解析

./nutch parse /data/testweb/crawl/segments/2014****

5). 将结果更新至crawldb

./nutch updatedb /data/testweb/crawl/crawldb /data/testweb/crawl/segments/2014xxx

至此,一次完整的爬取完成了。

 

 

 

 

posted on 2014-05-20 14:35  husoling  阅读(596)  评论(0编辑  收藏  举报

导航