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
至此,一次完整的爬取完成了。