终于!我把
Nutch0.9
的安装文档贴出来了
首先提醒的是,按照这个步骤做还是会遇到各种莫名奇妙的问题,没关系,按照步骤查找,一定有地
方出错了,从出错的地方重新做吧。 ( 连我自己每次重新安装的时候还是会遇到各种问题,所以过程
一定要细心啊!
)
直接上过程:
1 、首先,我的配置: JDK1.6 , Tomcat6.0 , Nutch0.9
2 、添加 JAVA_HOME 和 CATALINA_HOME 系统变量 ( 这个如果真不会的话自己百度吧 )
3 、安装 Cygwin 。
Nutch 最初是在 Linux 系统下开发的,所以要在 windows 环境下部署,必须使用这个软件来模拟仿真
系统环境。
下载了
Cygwin
后,双击
setup.exe
运行,在“选择下载资源”的对话框处有几个选项:从
Internet 安装、下载不安装、从本地安装。一般是第一个选项,如果已经安装包已经下载到了本地,
那么选择第 三个。之后设置好安装路径按默认的设置安装即可。
安装成功运行如图:
4 、 Nutch 是用 Java 语言开发的,在运行 Nutch 之前,必须告诉 Nutch 系统的 JDK 在哪。所以还需要设置
一个环境变量 NUTCH_HOME ,值同 JAVA_HOME 一致。
设置好了可以通过 Cygwin 测试 Nutch 是否可以运行。
1. 运行 Cygwin 。
2. 输入: cd /cygdrive/*/nutch-0.9 (nutch 所在的路径 ) PS : Cygwin 不支持 Unicode 字符
集,所以在设置 Nutch 路径时,要保证其中没有中文字符
3. 测试 Nutch 命令: bin/nutch 。如果 Nutch 安装正确,则此命令会返回所有的 Nutch 可执行命
令结果
这时 Nutch 已经可以运行,通过 Cygwin 运行 Nutch 的底层命令,已经可以进行抓取、索引、排序、检索等功能。但是做进一步的开发还需要进一步的修改。
5
、将
Nutch
导入
Eclipse
同导入其他
Eclipse
工程的过程一样,不过要注意几点:
(1)
将
Nutch
的配置文件加入到工程的
Librares
中,在
Libraries
选择
Add Classic Folder
。并在第
四个面
板“
Order and Export
”中,把
conf
置顶
(2)
将
output dir
改为:
tmp_build
(3)
导入完成
(4)
但编译还是不会通过的,因为
Nutch
包含的
rtf
和
mp3
包和
Nutch
使用的是不同的开源协议,所以
我们需要单独下载这两个包,把他们添加进工程中。下载地址为:
http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/
http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/
6 、 Nutch 的配置文件
Nutch 的基本配置文件都在 conf 文件夹下,之前已经把它添加到 Class Folder 中了
nutch-default.xml :我们会用到最多的配置文件,一定要好好读读其中的内容
crawl-urlfilter.txt : Nutch 抓取是的一些策略设置
nutch-site.xml :抓取时提交给被爬行网站的信息
………………
最好自己都读一下这些配置文件的内容并了解它们的作用
7 、建立网页抓取入口
在工程文件夹下新建一个文本文件做为爬虫抓取网页的入口: weburl.txt 。
这里我是在 Tomcat 下部署了一个网站用做测试,各位照样子填吧
http://localhost:8080/computernetwork/index.html
8 、修改配置文件
(1) 打开 conf 下的 nutch-default.xml 文件,这里我们要修改其中的一个属性: plugin.folders 。
把它修改为“ .\plugins ”。它的设置告诉 Nutch 应该到哪里去查找插件。
(2)
修改 crawl-urlfilter.txt :
# skip image and other suffixes we can't yet parse
-\.
(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|
exe|jpeg|JPEG|bmp|BMP|swf|doc)$
这是 Nutch 抓取网页时默认忽略的文件类型
# accept hosts in MY.DOMAIN.NAME
#+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
这是 Nutch 抓取是的限制访问策略。比如我的是: +^http:// localhost:8080/computernetwork/
那么如果抓取的网页中含有链接到其他站点的 URL , Nutch 不会去抓取这些网页。
(3)
修改
nutch-site.xml
<name>http.agent.name</name>
<value>Local</value>
<description>HTTP 'User-Agent' request header. MUST NOT be empty - please set this to a single word uniquely related to your organization. NOTE: You should also check other related properties:
http.robots.agents
http.agent.description
http.agent.url
http.agent.email
http.agent.version
and set their values appropriately.
</description>
</property>
<property>
<name>http.agent.description</name>
<value> Local web</value>
<description>Further description of our bot- this text is used in
the User-Agent header. It appears in parenthesis after the agent name.
</description>
</property>
<property>
<name>http.agent.url</name>
<value>http://MyCom.com</value>
<description>A URL to advertise in the User-Agent header. This will appear in parenthesis after the agent name. Custom dictates that this should be a URL of a page explaining the purpose and behavior of this crawler.
</description>
</property>
<property>
<name>http.agent.email</name>
<value> Your mail@*.com</value>
<description>An email address to advertise in the HTTP 'From' request header and User-Agent header. A good practice is to mangle this address (e.g. 'info at example dot com') to avoid spamming.
</description>
</property>
9 、配置 Eclipse 运行参数
“ Run as ”— > “ Run Configuration ” — > “ Java Application ”
Arguments面板中:
在 Program arguments 中,参数为:
weburl.txt -dir Local – depth 5 – topN 100 – threads 100
指的是爬虫爬取网页的地址入口在 weburl.txt 中设置,爬取的网页、索引等信息存在本地 Local 文
件 夹中,爬虫爬取的深度为: 5 ,每层只爬取前 100 个网页,同时开 100 个线程进行爬取。
在 VM arguments 中,设置参数为:
-Dhadoop.log.dir=logs – Dhadoop.log.file=hadoop.log – Xmx512m
这设置的是爬取过程的 Log 日志记录地址。另外,爬取网页过多时 Nutch 会出现 JavaVM 溢出的错
误, 因此经常还需在此处设置 JavaVM 参数,如: -Xmx512m ,即为 JAVA 虚拟机分配内存大小为 512M 。
10 、运行。
运行之后,在 Nutch 中的 Local 文件夹下会生成 5 个文件夹:
crawldb :下载的 URL 及下载日期,用于存放页面更新的检查时间。
linkdb :存放 URL 的互联关系,是下载完成后分析得到的。
segments: 存放抓取的页面。下面的子目录数与获取页面层数有关。通常是一层一个文件夹。
indexs :存放每次下载的独立索引目录。
index :符合 Lucene 格式的索引目录,是 indexs 里所有 index 合并后的完整索引。
11 、部署到 tomcat
(1) 打开 ANT 面板,打开添加 Buildfiles 对话框,将 Nutch 的 build.xml 添加进来。
(2) 重新运行 job ( default )或者 war 。此处会出现一个 build failed 错误,出现在文件中的:
<touch datetime="01/25/1971 2:00 pm">
<fileset dir="${conf.dir}" includes="**/*.template"/>
</touch>
原因是因为在 Nutch 工程中没有 *.template 文件,所以可以把这几句删除掉 ( 也不需要去下载这
几个文件。如果使用了这几个文件,每次编译后曾经修改过的配置文件会被改回模板中的原始值。 )
(3) 将 build 文件夹下的 nutch-0.9.war 复制到 CATALINA_HOME 下的 webapps 下,重新启动 Tomcat ,将生
成的 nutch-0.9 文件夹放到 ROOT 文件夹下。
访问: http://localhost:8080/nutch-0.9
(我是将 nutch 文件夹下的所有文件直接放在了 ROOT 文件夹下,所以直接访问 http://localhost:8080/ )
12 、开始搜索
在 CATALINA_HOME\webapps\ROOT\nutch-0.9\WEB-INF\classes 下,找到 nutch-site.xml ,
添加属性:
<property>
<name>searcher.dir</name>
<value>E:\nutch-0.9\Local</value>----------
注:
nutch
工程下抓取时设置的文件夹位置
</property>
这个属性告诉
Tomcat
到哪里去找
Nutch
索引。
------ 想搜索吗? No !还有东西要改!
这时要是直接搜索,
Tomcat
会提示你:
org.apache.jasper.JasperException: /search.jsp(151,22) Attribute value language + "/include/header.html" is quoted with " which must be escaped when used within the value
找到 search.jsp 下的 151 行,把引号转义吧。。。。
<jsp:include page="<%= language + \"/include/header.html\"%>"/>
想搜索吗?可以试一下
结果是——英文可以了,但是中文会出现乱码
还得改。。。。那就改吧
在 CATALINA_HOME\conf 下找到 server.xml
修改 Connector port="8080" protocol="HTTP/1.1" 属性中的值,添加两句:
URIEncoding="UTF-8" useBodyEncodingForURI="true"
----------------------------------------
Oh My God
!终于可以搜了!!!撒花庆祝吧!这里是真的可以了
可是只有这些吗?
No !这只是搭建一个基本的基于Nutch的搜索平台。实际上基于Nutch还有很多可以做和扩展。
PS :这些都是百度、 Google 出来的各种方法的整理,本人已经实践过多次,绝对可以部署实施,但是过程中可能还是会出现各种问题,大家耐心的修改吧!
由于时间稍久,中间可能存在疏漏,而且对 Nutch 学习也并不深入,如发现错误,欢迎大家交流指正!