nutch爬虫原来是这样操作的!
一、nutch簡介
nutch是大名鼎鼎的Doug Cutting發起的爬蟲項目,nutch孵化了現在大數據處理框架Hadoop。在nutch V 0.8.0 版本之前,Hadoop是nutch的一部分,從nutch V0.8.0開始,HDFS和MapReduce從nutch中剝離出成為Hadoop。v0.8.0之后,nutch就完全構建在Hadoop的基礎之上了。
Nutch是一個開源的網絡爬蟲,在搜索引擎中負責爬取網頁,同時自動維護網頁的URL信息,例如相同網頁去重、網頁定時更新、網頁重定向。nutch采用了MapReduce分布式爬取和解析,具有良好的水平擴展性。
現在版本的Nutch本身并不具有搜索功能(V1.2之后,nutch專注于爬取數據),但是可以自動向搜索服務器提交爬取的網頁。例如,solr,可以通過Nutch自帶的命令,來控制Nutch是否將網頁提交給索引服務器。
Nutch雖然是優秀的分布式爬蟲框架,但是它的所有設計,都是為了搜索引擎服務的。在hadoop上用map-reduce框架開發,并不是很適合做數據抽取的業務。如果你的業務是做數據抽取(精抽取),而不是搜索引擎。不一定要選用Nutch。
nutch現在分為兩個分支。一個是1.x系列,一個是2.x系列。它們的主要區別是2.x引入了Gora作為存儲抽象層,從而支持各種NoSQL數據庫,如HBase,Cassandra等
二、nutch安裝
1.nutch的運行環境
??? JDK1.7及以上
??? 需要使用linux操作系統
2.解壓:
設置環境變量
驗證: nutch
3.目錄結構
bin:兩個文件,一個是nutch,一個是crawl,
??????? crawl是對nutch中的命令進行了封裝,實現了一站式調用。
????????
conf:里面保存了nutch的基本配置信息,nutch-default.xml nutch-site.xml parse-plugins.xml regex-urlfilter.txt
????
? docs:api文檔
? lib:存儲了nutch的依賴jar包
? plugins:存儲了nutch使用的插件jar包
三、nutch 爬蟲
nutch 爬取準備工作
1:在nutch-site.xml中添加http.agent.name的配置。如果不配置,啟動會報錯。
2:創建一個種子地址目錄,urls(在nutch 目錄中就可以),在目錄下面創建一些種子文件,種子文件中保存種子地址。每一個種子地址占一行。http:www.zhaozhiyong.cn
?? 注意:種子地址必須以類似于http的字符開頭
3:(可選):控制爬取的url范圍,只爬取站內,在regex-urlfilter.txt 最后添加 :+^http://([a-z0-9]*\.)*bbs.superwu.cn/[\s\S]*
??
4:nutch爬取數據?? bin/crwal urls crawl 1
??? crawl urls crawl 1
??? urls:表示是種子目錄
??? crawl:表示是爬取文件的存儲位置
??? 1:表示是爬取的層次
5.nucth爬取生成的目錄
??? 在爬取的時候指定的crawl中會有下面幾個目錄
??? crawldb:存儲的是待爬取的url
??????? 查看目錄數據:nutch readdb crawl/crawldb -stats -sort
??? linkdb:存儲的是反鏈信息
??????? 查看目錄數據:nutch readlinkdb crawl/linkdb -dump links?
??? segments:存儲的是網站所有數據信息
??????? 查看目錄數據:nutch readseg -dump crawl/segments/20150906090648 sgedb
????????
??? 一個segment包括以下子目錄:
??????? crawl_generate:包含需要抓取的網址列表
??????? crawl_fetch:包含每個抓取頁面的狀態
??????? content:包含每個抓取頁面的原始內容
??????? parse_text:包含每個抓取頁面的解析文本
??????? parse_data:包含每個頁面的外部鏈接(外鏈)和元數據
??????? crawl_parse:包含網址的外部鏈接地址,用于更新crawldb數據庫
???
6.查看nutch生成的數據
??? nutch中的數據都是sequencefile格式的,除了使用上面的nutch命令查看之外
??????? 還可以使用java代碼讀取這些文件
??????? 參考資料<查看nutch生成的中間文件>
??????? 注意:在使用提供的代碼讀取文件時,需要先使用more命令查看對應文件中存儲的數據類型
??????????? 對應需要修改代碼中27行中的value的類型。
四、在solr中對爬取的數據建立索引
在使用solr的之前做以下步驟:
1):需要把nutch下的schema-solr4.xml拷貝到solr中
??????? 命令:cp /usr/local/nutch/conf/schema-solr4.xml /usr/local/solr-4.10.4/example/solr/collection1/conf
2):刪除solr中的默認配置文件schema.xml,在把剛才拷貝過去的文件該名稱
??????? cd /usr/local/solr-4.10.4/example/solr/collection1/conf
??????? rm schema.xml
??????? mv schema-solr4.xml schema.xml
3):在schema.xml中添加一個字段配置
??????? <field name="location" type="string" stored="true" indexed="true"/>
或者也可以動態指定,
??????? 例子:crawl -i -D "solr.server.url=http://192.168.1.170:8983/solr"?urls crawl 1
?
1.啟動solr
??? cd /usr/local/solr-4.10.4/example
??? java -jar start.jar
2.
命令:crawl -i urls crawl 1
-i:表示會對爬取的數據建立索引,默認會在本機solr中建立索引,
??????? 如果使用其他服務器上的solr,需要修改nutch-default中solr.server.url的值,
??????? 建議在nutch-site.xml中進行覆蓋。
3.檢驗
http://127.0.0.1:8983/solr/? 可以通過query 查看到content的內容
注意:如果把爬取層次改為2層,發先抓取的數據還是很少,那是因為在regex-urlfilter.txt中對url進行了過濾
??????? 把url中包含?=之類的都忽略掉了。
??????? 所以可以把這個配置直接注釋掉,或者修改為其他規則。
??????? 詳細修改,參考:<regex-urlfilter解釋.txt>
五、nutch源碼導入到eclipse
先安裝ant
??? cd /usr/local
??? tar -zxvf apache-ant-1.9.6-bin.tar.gz
??? mv apache-ant-1.9.6 ant
??? export ANT_HOME=/usr/local/nutch
??? export PATH=$ANT_HOME/bin:$PATH
???
nutch的源碼是ant管理的,所以不能直接導入到eclipse,需要轉換可以使用ant eclipse -verbose但是,nutch的依賴是使用ivy管理的,
在執行轉換的過程中會下載依賴的jar包,jar包很多,所以建議使用提供的.ivy.zip文件。
這樣在轉換的時候就需要指定一下ivy jar包的存放位置,使用下面命令
ant eclipse -Divy.default.ivy.user.dir=/usr/local/.ivy -verbose
????????
轉換完成之后就可以導入到eclipse中了,但是導入之后發現源碼報錯,
需要修改java buildpath->order and export ->把apache-nutch-1.10/src/bin 移動到最上面,?? 使用top按鈕。
???
六、nutch源碼編譯
需要先把.ivy.zip包解壓到/usr/local目錄下面
解壓unzip .ivy.zip(在Linux 下)
??? 如果提示沒有unzip命令,則使用yum install -y unzip
下載nutch源碼,解壓,重命名
cd /usr/local
??? tar -zxvf apache-nutch-1.10-src.tar.gz?
??? mv apache-nutch-1.10 nutch_src
??? cd nutch_src
??? ant -Divy.default.ivy.user.dir=/usr/local/.ivy –verbose
注意:在編譯源碼之前,需要修改nutch_src/conf/nutch-site.xml,
??????? 在里面添加http.agent.name屬性
??????? <property>
????????? <name>http.agent.name</name>
????????? <value>my nutch spider</value>
??????? </property>
?
七:nutch運行的兩種方式
??????
在nutch官網下載的nutch的bin壓縮包,只支持在使用本地模式運行nutch
??? 想要使用集群模式的話需要使用編譯后的源碼中的腳本
cd /usr/local/nutch_src/runtime/deploy
??? bin/crawl /urls /crawl 1
注意:在使用這種方式的時候要保證nutch所在的節點上面配置的有HADOOP_HOME
??????? 環境變量,因為nutch在向集群中提交任務的時候會根據這個環境變量對應
??????? 的目錄下面的配置文件找集群的地址。
??????? /urls 表示是hdfs上面的文件,里面必須要有一個種子文件
1:nutch的采集流程
??? inject:表示注入url
??? generagete:生成爬取列表
??? fetch:爬取url
??? parse:解析url
??? updatedb:更新crawldb數據庫
????
??? 一般情況下,inject只會執行一次,generate、fetch、parse、updatedb這四步是一個循環。
????
需要nutch的視頻資料可以掃描下方微信二維碼:
總結
以上是生活随笔為你收集整理的nutch爬虫原来是这样操作的!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL中迭代器的作用,有指针为何还要迭代
- 下一篇: 详解平衡二叉树(AVL),红黑树与平衡二