一、 实验目的
利用开源工具,构建一个简单搜索引擎系统
二、 实验环境
系统平台:Windows
爬虫、索引:Nutch-1.2
WEB服务器界面:Tomcat-7.0.61
中文分词工具:IKAnalyzer3.2.8
windows平台上运行的类UNIX模拟环境: Cgywin:
JDK版本:1.7.0_45
三、 实验过程
1.工具安装
安装过程不详述,唯一要注意的就是环境变量的设置。只有把环境变量设置正确,才能保证后面的实验进行顺利。
· nutch的配置,将nutch解压缩(.gz后缀,可以直接用winRar解压)后将文件夹nutch-1.2(包含文件夹下所有文件)放置到cygwin/home下;
·打开cygwin,在cygwin环境下进入nutch-1.2目录下(cd /cygdrive/I/cygwin/home/nutch-1.2),使用命令bin/nutch进行测试,结果正常,如下图
2.nutch配置
·设置系统变量NUTCH_JAVA_HOME,
它的值就是java的安装目录,例如:C:\Java\jdk1.7.0_17
设置需要抓取的网站主域名。
在Nutch-1.2的安装目录下建立一个名为urls的文件夹,并在文件夹下建立url.txt文件,在文件中写入:如http://www.sohu.com/(即要抓取网站的网址,注意最后要加斜杠)。
·设置网站过滤规则。
编辑conf/crawl-urlfilter.txt文件,修改MY.DOMAIN.NAME部分。
将
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/
改为:
# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*souhu.com/
·设置代理信息。
编辑conf/nutch-site.xml文件。在<configuration>和</configuration>之间添加如下内容:
<property>
<name>http.agent.name</name>
<value>mynutch</value>
<description>spider</description>
</property>
<property>
<name>http.agent.version</name>
<value>1.2</value>
</property>
<property>
<name>http.agent.email</name>
<value>MyEmail</value>
<description>
</description>
</property>
·设置代理名
编辑nutch-1.2\conf\nutch-default.xml文件,找<name>http.agent.name</name>,然后随便设置Value值。例如:
<property>
<name>http.agent.name</name>
<value>test</value>
</property>
·运行crawl爬虫命令抓取内容
运行cygwin后,
a)首先切换进入nutch-1.2的目录;
b)运行命令:export LANG="zh_CN.GBK"(设置linux环境变量)
c)运行命令:bin/nutch crawlurls/url.txt -dir 5sing -depth 4 -threads 5 -topN 100 >&logs/log1.log
crawl 是nutch检索数据命令,后面跟上要检索的URL文件;
-dir指定抓取内容所存放的目录;
-depth表示以要抓取网站顶级网址为起点的爬行深度;
-threads指定并发的线程数;
-topN抓取时每页的最大抓取链接。
-最后是指明日志文件
2.tomcat上运行nutch进行搜索测试
1)把nutch-1.2.war拷贝到Tomcat//webapps/下面,重启tomcat,这步是为了使tomcat展开nutch-1.2.war
2)修改webapps/ nutch-1.2/WEB-INF/classes/nutch-site.xml文件如下:
<?xmlversion="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<!-- Put site-specificproperty overrides in this file. -->
<configuration>
<property>
<name>searcher.dir</name>
<value>c:/cygwin/home/nutch-1.2/crawled</value>
</property>
</configuration>
3)为了支持中文的搜索,修改Tomcat/conf/server.xml。找到对应的地方修改成
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"useBodyEncodingForURI="true"/>
4)在浏览器中输入http://localhost:8080/nutch-1.2/
5)由下图搜索结果看出NUTCH本身是按字搜索的,所以还要添加中文分词插件
3.为Nutch添加中文分词工具IKAnalyzer
请看上一篇博文 http://blog.csdn.net/u011941451/article/details/46289149
四、 二次开发
1.为了达到实验效果对抓取网站进行增加,共爬取了5个主流的音乐网站,完成一个对主流音乐网站的站内搜索 (抓取用时51分钟)
http://y.qq.com/
http://www.xiami.com/
http://5sing.kugou.com/
http://music.163.com/
http://www.yinyuetai.com
2. 对nutch主页面进行了重新优化,使其变得美观
3. show all hits修改
(nutch默认的页面hits有重复,最后一页出现showallhits的按钮,原来还以为是底层抓取重复,后来才发现是网页上的问题。不知道hitsPerSite这个变量到底是起什么作用的,为啥还有个showallhits,解决方法如下)
在search.jsp中修改下面的语句
Int hitsPerSite = 2; 2改为0
4. 分页功能
默认情况下,搜索引擎Nutch在查询搜索结果时,只有下一页功能。主要是Nutch采用了“80/20”原则,即返回前面最相关的记录,而基本上的用户都不会去关心第三页以后的内容
在修改过程中,实现了功能但分页按钮出现乱码,暂时还没有解决
五、 Nutch相关测试命令
1. bin/nutchorg.apache.nutch.searcher.NutchBean关键字 进行查询测试
2. bin/nutchreaddb musics/crawldb –stats 查看抓取总数
3.上命令加 –sort 展开status 查看域名信息 如下
六、 实验错误解决
1.爬虫抓取时: Exception in thread "main" java.io.IOException: Jobfailed!
解决方法:在cygwin中输入:exportLANG="zh_CN.GBK" ,而后回车 其实就是设置下linux的环境变量
2.No URLs to fetch - check your seed list and URL filters.
编辑Nutch-1.2\conf\Nutch-default.xml文件,找http.agent.name,然后随便设置Value值。例如:
http.agent.name
test
3.Exception in thread "main"org.apache.hadoop.mapred.FileAlreadyExistsException
: Output directory crawl/index already exists!
两次爬虫抓取内容储存在同一个文件夹 导致错误
七、 总结
在Nutch以及其他工具的配置上花了很长时间,主要是在发现错误和解决错误上,中间也从头开始整理过一次。同时在抓取过程中,发现同样的抓取语句,对不同网页抓取效果不同,甚至有几个网址只抓取到很少的网页,如新浪,网易云音乐。具体问题找了很久还没有找出来。
参考资料 http://blog.sina.com.cn/s/blog_8c7c21340100zemu.html
http://www.cnblogs.com/streamhope/archive/2011/07/27/2118408.html 包含一系列开发过程 界面设计 二次开发的参考