最近hadoop着实很火,平时玩hadoop没有数据也很头疼,还好有nutch这个开源框架,可以从网上爬取数据。本身nutch也依赖hadoop来抓取数据,正好一举两得,
在学习nutch的过程中也提高对hadoop的认识,下面我会在业余时间整体对nutch的安装部署使用做一个比较全的描述,希望大家也一起共同进步吧~~
1、安装nutch通过它的二进制分发包
a、下载apache-nutch-1.X-bin.zip到http://www.apache.org/dyn/closer.cgi/nutch/
b、解压刚才的zip文件通过命令(使用zip apache-nutch-1.X-bin.zip 即可)
c、进入到解压后的nutch目录里
或者放弃使用编译好的二进制分发包,使用nutch源码编译后再安装
a、下载源码包(apache-nutch-1.X-src.zip)然后解压出来
b、进入到apache-nutch-1.x目录里 执行ant命令
c、这里会出现个runtime/local目录准备为nutch安装用,local本地运行nutch,runtime为分布式运行nutch
2、确认nutch是否已经正确安装
进入nutch目录后,运行“bin/nutch”出现类似下面的截图说明nutch已经安装成功
执行过程中需要一些注意的地方如果出现 “Permission denied”需要执行 chmod +x bin/nutch
如果没有设置JAVA_HOME 需要在系统中设置JAVA_HOME的环境变量
3、开始爬去你的第一个网站数据
a、打开conf/nutch-site.xml 添加agent名称
b、在nutch目录里创建urls目录(mkdir -p urls),进入urls目录里,创建seed.txt文件,该文件里面是nutch要爬取得url(注意:一行一个url)
c、打开conf/regex-urlfilter.txt,里面是正则表达式用于匹配需要过滤掉那些网站,或者需要包含那些域名的网站
d、执行命令
bin/nutch crawl urls -dir crawl -depth 3 -topN 5
命令crawl 的参数
-dir 为需要读取的种子目录
-threads为启动多少个线程
-depth为从根网页开始那应该被抓取的链接深度。
-topN为 每一深度将会被取回的网页的最大数目
执行上面命令后就会发现下面的文件夹被创建
crawl/crawldb
crawl/linkdb
crawl/segments
如果你有一个设置好的solr并且想要建立索引到那里去,你必须添加 -solr <solrUrl>参数到你的crawl命令里去例如: bin/nutch crawl urls -solr http://localhost:8983/solr/ -depth 3 -topN 5
4、循序渐进之–概念Nutch数据是由这些组成的:
* 抓取数据库,或者说是crawldb。它包含了关于每一个Nutch已知的URL的信息,包括它是否已经被获取,甚至是何时被获取的。
* 链接数据库,或者说是linkdb。它包含了每一个已知URL的链接,包括源的URL以及链接的锚文本。
* 一系列的分段,或者说是segments。每一个segments都是一组被作为一个单元来获取的URL。segments是它本身这个目录以及它下面的子目录:
*
* 一个crawl_generate确定了将要被获取的一组URL;
* 一个crawl_fetch包含了获取的每个URL的状态;
* 一个content包含了从每个URL获取回来的原始的内容;
* 一个parse_text包含了每个URL解析以后的文本;
* 一个parse_data包含来自每个URL被解析后内容中的外链和元数据;
* 一个crawl_parse包含了外链的URL,用来更新crawldb。
5、循序渐进之–用一组URL列表确定crawldb选择
1:从DMOZ数据库自举。由injector添加URL到crawldb里。让我们从DMOZ开放式分类目录添加URL吧。首先我们必须下载并且解压缩这个DMOZ所有网页的列表(这是一个200多MB的文件,所以这会消耗几分钟)。
wget http://rdf.dmoz.org/rdf/content.rdf.u8.gz
gunzip content.rdf.u8.gz
接下来我们选择这些网页当中随机的一些子集(我们使用随机的子集所以所有在跟着这一个教程做的人就不会伤害到同样的网站)。DMOZ包含了大约三百万个URL。我们从每5000个URL中选择出一个,因此我们就有大约1000个URL:
mkdir dmoz
bin/nutch org.apache.nutch.tools.DmozParser content.rdf.u8 -subset 5000 > dmoz/urls
这一分析器也需要几分钟来完成,因为它必须要分析整个文件。最后,我们用这些选出的URL来初始化crawldb。
bin/nutch inject crawl/crawldb dmoz
现在我们有了一个大约有1000个未被获取的URL的网络数据库。
选择2:从初始列表里自举。这一选项不为人们所了解的地方在于创建初始列表并覆盖在urls/目录里。
bin/nutch inject crawl/crawldb urls
6、循序渐进之–获取要获取,我们首先要从数据库里产生一个获取的列表。
bin/nutch generate crawl/crawldb crawl/segments
这会为所有预定要被获取的网页产生一个获取列表。获取列表放在一个新创建的分段目录里。分段目录的名称取决于它被创建时的时间。
我们将这个分段的名字放在shell的变量s1里面:
s1=`ls -d crawl/segments/2* | tail -1`
echo $s1
现在我们能以下面的命令在这个分段里进行获取:
bin/nutch fetch $s1
然后我们就能解析条目:
bin/nutch parse $s1
当这一切完成以后,我们就以获取回来的结果更新数据库:
bin/nutch updatedb crawl/crawldb $s1
现在,数据库包含了刚刚更新的条目的所有初始页,除此之外,新的网页条目对于链接到初始的集合来进行新条目的发现是相符合的。
所以我们对包含得分最高的1000页提取出来产生一个新的分段:
bin/nutch generate crawl/crawldb crawl/segments -topN 1000
s2=`ls -d crawl/segments/2* | tail -1`
echo $s2
bin/nutch fetch $s2
bin/nutch parse $s2
bin/nutch updatedb crawl/crawldb $s2
让我们再来获取一次吧:
bin/nutch generate crawl/crawldb crawl/segments -topN 1000
s3=`ls -d crawl/segments/2* | tail -1`
echo $s3
bin/nutch fetch $s3
bin/nutch parse $s3
bin/nutch updatedb crawl/crawldb $s3
通过这一点我们已经获取了几千页的网页。让我们索引它们吧!
7、循序渐进之–反向链接在我们进行索引之前,我们首先要反转所有的链接,以便我们能够以这些网页来索引进入的锚文本。
bin/nutch invertlinks crawl/linkdb -dir crawl/segments
我们现在准备好要用Apache Solr进行搜索了。
8、solr和nutch的整合安装
a、到http://www.apache.org/dyn/closer.cgi/lucene/solr/上下载solr并解压出来
b、进入nutch的主目录里cd 到conf文件夹下,copy出schema-solr4.xml到solr主目录下的\example\solr\collection1\conf目录里,然后打开该文件,在该文件的
第351行加入 <field name="_version_" type="long" indexed="true" stored="true"/> (如果不加入该行启动solr的时候会报错),然后修改该文件名称为schema.xml
并将原来该目录的schema.xml备份下
c、之后启动solr,并执行命令 bin/nutch crawl urls -solr http://localhost:8983/solr/ -depth 3 -topN 5 就可以将爬去的网站的数据索引到solr里
d、命令执行完之后即可打开solr的web页面看看爬去的数据 http://localhost:8983/solr/#/collection1/query
ps:nutch使用的是1.7 solr版本4.6 ,部分内容摘自 http://www.oschina.net/translate/nutch-tutorial
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐