給你一個換ip軟體:分散式爬蟲透過具體都能幹點啥?

太陽小諸葛發表於2019-02-26

  網路爬蟲使用分散式,重點是解決兩個難題:

  1)大批次URL管理

  2)網速

  現在比較流行的分散式網路爬蟲,是Apache的Nutch。但是對於大多數使用者來說,Nutch是這幾類網路爬蟲裡,最不好的選擇,理由如下:

  1)Nutch是為SEO設計的網路爬蟲,大多數使用者是需要一個做精準資料爬取(精抽取)的網路爬蟲。Nutch執行的一套流程裡,有三分之二是為了SEO而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做資料抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖透過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分散式網路爬蟲框架了。

  2)Nutch依賴hadoop執行,hadoop本身會消耗很多的時間。如果叢集機器數量較少,爬取速度反而不如單機網路爬蟲快。

  3)Nutch雖然有一套外掛機制,而且作為亮點宣傳。可以看到一些開源的Nutch外掛,提供精抽取的功能。但是開發過Nutch外掛的人都知道,Nutch的外掛系統有多蹩腳。利用反射的機制來載入和呼叫外掛,使得程式的編寫和除錯都變得異常困難,更別說在上面開發一套複雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的外掛掛載點。Nutch的外掛有隻有五六個掛載點,而這五六個掛載點都是為了SEO服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取外掛,都是掛載在“頁面解析”(parser)這個掛載點的,這個掛載點其實是為了解析連結(為後續爬取提供URL),以及為SEO提供一些易抽取的網頁資訊(網頁的meta資訊、text文字)。

  4)用Nutch進行網路爬蟲的二次開發,網路爬蟲的編寫和除錯所需的時間,往往是單機網路爬蟲所需的十倍時間不止。瞭解Nutch原始碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch原始碼。除錯過程中會出現除程式本身之外的各種難題(hadoop的難題、hbase的難題)。

  5)很多人說Nutch2有gora,可以持久化資料到avro檔案、hbase、mysql等。很多人其實理解錯了,這裡說的持久化資料,是指將URL資訊(URL管理所需要的資料)存放到avro、hbase、mysql。並不是你要抽取的結構化資料。其實對大多數人來說,URL資訊存在哪裡無所謂。

  6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本繫結了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x官網上寫的是可以支援到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。

  所以,如果你不是要做SEO,儘量不要選擇Nutch作為網路爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的網路爬蟲,其實是衝著Nutch的名氣,當然最後的結果往往是專案延期完成。

  如果你是要做SEO,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的SEO了。如果非要用Nutch2的話,建議等到Nutch2.3釋出再看。目前的Nutch2是一個非常不穩定的版本。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561288/viewspace-2637002/,如需轉載,請註明出處,否則將追究法律責任。

相關文章