初探网络爬虫Nutch

第一章 Nutch印象

Nutch是什么

NutchApache旗下的Java开源项目,最初是一个搜索引擎,现在是一个网络爬虫。

研究nutch的原因

我们有google,有百度,为何还需要建立自己的搜索引擎呢?

  • 透明度

    nutch是开放源代码的,因此任何人都可以查看它的排序算法是如

何工作的。商业的搜索引擎排序算法都是保密的,我们不知道搜索出来的排序结果是如何计算的。更进一步,一些搜索引擎允许竞价排名,比如百度,这样的索引结果并不是和站点内容相关的。因此nutch 对学术搜索和政府类站点的搜索来说,是个好选择,因为一个公平的排序结果是非常重要的。

  • 对搜索引擎的理解

我们并没有google的源代码,因此学习搜索引擎Nutch是个不错的选择。

  • 扩展性

利用Nutch构建自己的搜索引擎,Nutch 是非常灵活的:他可以被很好的客户订制并集成到你的应用程序中,使用Nutch 的插件机制,Nutch 可以作为一个搜索不同信息载体的搜索平台。当然,最简单的就是集成Nutch到你的站点,为你的用户提供搜索服务。

Nutch的特性

  • 插件架构,高度模块化

    大多数功能可通过插件来实现和改变

  • 易扩展,极强的伸缩性

    增加机器即可,不用修改代码,从一台可扩展到成千上万台

  • 高可用性,健壮容错

    容忍宕机情况的出现

  • 灵活可配置

    提供了162个配置参数

Nutch的设计初衷

商业搜索引擎不开源,搜索结果不仅仅是根据网页本身的价值进行排序,而是有众多商业利益考虑。Nutch提供了开源的解决方案,帮助人们很容易地建立一个搜索引擎,为用户提供优质的搜索结果,并能从一台机器扩展到成百上千台。 

我们学习的目的

通过Nutch爬取邮箱账号。

第二章 Nutch的安装配置

必备环境

Linux操作系统、jdk

Nutch安装

#svn检出Nutch1.6项目

[root@nutch   nutch2]# svn co https://svn.apache.org/repos/asf/nutch/tags/release-1.6/

 

#进入release-1.6目录

[root@nutch nutch2]# cd release-1.6/

#ant命令编译nutch1.6

[root@nutch release-1.6]# ant

注意:需要在build.xml所在目录中运行ant命令编译nutch

 

Ant构建之后,生成runtime文件夹,在runtime下有localdeploy两个子文件夹,分别代表nutch的两种运行方式。

Deploy:使用hadoop的方式运行,数据存储在hdfs文件系统中

Local:使用本地文件系统来运行

deploylocal区别

  • 数据的存储位置不同

  • local模式中对hadoop没有依赖

  • deploy运行方式必须将数据存储到hadoop,对hadoop依赖

#查看bin/nutch脚本

[root@nutch local]# vi bin/nutch

通过查看bin/nutch脚本可以发现,在deploy模式下nutch是依赖于hadoop平台的

NutchHadoop是通过什么连接起来的?

通过nutch脚本,hadoop命令把apache-nutch-1.6.job提交给hadoopJobTracker

#启动nutch

[root@nutch local]# bin/nutch

三、bin/nutch下相关命令

Crawl 命令

#查看crawl命令用法

[root@nutch local]# bin/nutch crawl

Usage: Crawl <urlDir> -solr <solrURL> [-dir d] [-threads n] [-depth i] [-topN N]

初学时不知道每一个命令选项用于干嘛?这种情况下我们可以通过研读源代码的方式查看相应选项参数。

<urlDir>选项参数

#放置需要爬取的网站的url文件

[root@nutch local]# mkdir urls

#建立url文件,放置需要爬取的url网址

[root@nutch urls]# vi url

-solr <solrURL>选项参数

此参数可选,可加可不加

Nutch把网页爬取下来后,将爬取网页交给solr进行索引,之后用户通过solr来进行内容的搜索,Nutch本身并不做索引方面的工作,它只是把文档提交给solrsolr负责索引。

从这些可以看出,Nutch目前是一个网络爬虫,而不是一个搜索引擎。它的目标已经从搜索引擎蜕变为网络爬虫。

[-dir d]选项参数

爬取的页面保存地址

[-threads n]选项参数

因为现在是本地模式,在本地模式下只有一个map和一个reduce。在一个map和一个reduce的情况下,map/reduce的工作是串行的。

没办法充分利用cpu的多线程特性。虽然map/reduce不能并行,但是在网页抓取的过程中,即fetch阶段是可以使用多线程的。

[-depth i] 选项参数

抓取深度

四、抓取之前要做的一些配置

  • 建立url文件,放置需要爬取的url网址,用于生成crawlDB数据库

  • urls/crawl.txt进行配置,修改conf/nutch-site.xml,加入<property>

    <name>http.agent.name</name>

    <value>test-nutch</value>

</property>信息

  • 配置JAVA_HOME环境变量,一般在/usr/lib/jvm下会装有java的环境。

五、#运行crawl命令,爬取网页

[root@nutch local]#nohup bin/nutch crawl urls -dir data -threads 3 -depth 3 &

六、查找命令匹配的类

打开bin/nutch脚本,查找相关命令。如查找fetch命令所对应的类

[root@nutch local]# vi bin/nutch

按“/fetch”回车,再按“n”查找相匹配的下一条记录。

Nutch入门重点在于分析nutch脚本文件

七、安装配置Solr3.6.2

#下载solr3.6.2

[root@nutch nutch2]# wget http://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.tgz

Solr可运行在tomcat下,为简化配置,我们使用默认的solr内嵌的服务器jetty

#进入nutchconf目录

nutch/conf的配置文件scheme.xml复制到solr/conf中,告诉solr在建立的索引的时候要建立哪些字段。

nutchconf文件中,有两个scheme打头的文件,schema.xmlschema-solr4.xml文件。schema-solr4.xml对应solr4.x的版本,schema.xml对应solr3.6的版本。因为我们用的solr3.6.2版本,所以把nutch/conf目录下的schema.xml文件复制到solr主目录下的conf目录中。

 比较关键的配置

  • nutch/conf的配置文件scheme.xml复制到solr/conf

告诉solr在建立的索引的时候要建立哪些字段。

  • 修改solr默认的配置文件solr/conf/solrconfig.xml

<str name=”df”>text</str>全部替换为<str name=”df”>content</str>

因为solr配置文件内默认使用的搜索字段是text,而我们nutch中默认搜索字段是content,所以需要对solrconfig.xml文件做搜索字段的替换。

#以后台进程的方式启动solr服务器

 [root@nutch local]# java -jar start.jar &

使用nutch的本地模式提交索引

[root@nutch local]# bin/nutch solrindex http://192.168.1.49:8983/solr/ data/crawldb/ -linkdb data/linkdb/ -dir data/segments/

使用lukeall工具查看索引

提交索引后把索引下载到桌面用lukeall打开,可看到索引的字段、文档数目、term的数目,也可以在documents选项内查看每一个特定的文档。

#通过web界面查看solr服务器的情况

 http://192.168.1.49:8983/solr/

八、给solr3.6.2配置分词器mmseg4j

  • 配置分词器关键在于,将分词器相应jarmmseg4j-all-1.8.5-with-dic.jar复制到solr下的lib目录。

  • nutch/conf/scheme.xml文件的<tokenizer class="solr.WhitespaceTokenizerFactory"/><tokenizer class="solr.StandardTokenizerFactory"/>配置替换为<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode=”complex”/>

 

 

转载于:https://my.oschina.net/HIJAY/blog/223917

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值