Heritrix源碼分析(七) Heritrix總體介紹

來源:互聯網
上載者:User

   本部落格屬原創文章,歡迎轉載!轉載請務必註明出處:http://guoyunsky.javaeye.com/blog/642794

        歡迎加入Heritrix群(QQ): 109148319 , 10447185(已滿)  , Lucene/Solr群(QQ) :  118972724

 

      網上關於Heritrix的基本介紹有很多,這裡就不再重複。我這裡主要介紹下它的優缺點。然後我會介紹它的運作流程以及我會從流程中各個點結合源碼來分別介紹....

      Heritrix整體讓人感覺有些複雜和繁瑣,一個爬蟲寫成這樣也真是成仙了。接觸Heritrix有1年半了,大概花了2個月的時間(每天看代碼時間8小時以上)將它的代碼看完。這1年半也接觸過Lucene和Hadoop,也興緻勃勃的調試過他們的代碼,但大多是半途而廢。可能因為自己工作的原因吧,要一直不停的抓取資料改進爬蟲,但更主要的還是發現他們的代碼其實都差不多,只是思想、設計和作用不一樣而已。於是決定還是把時間花在Heritrix上,爭取把他搞透,然後舉一反三成為自己的東西,以後再去研究Lucene、Haddop自然也就不在話下。

       首先說下Heritrix的優缺點吧,以後我會不斷擴充,也歡迎大家發表意見:

       1.高度可擴充性,但因為這個也加重了它的複雜和繁瑣。Heritrix抓取個URL分為8個處理器分工合作完成,每個處理器都可在order.xml中配置,所以使用者可以自己擴充並使用他們,只要繼承相關的父類即可。

       2.效能優秀:

                1)Heritrix對抓取過的Host都會相應的儲存,並放在記憶體中,如果再次從這個Host中抓取資料就可以避免很多重複性的東西

                2)可以發現運行Heritrix佔用的資源很少,跑一個月也是如此。只因Heritrix在運算和IO操作上都控製得很好。而且這些操作都可以配置,比如下載URL將它寫到本機每個線程最多佔用多少記憶體。也有可能很多人會質疑,說自己擴充了Heritrix經常記憶體溢出,我只能說記憶體溢出那部分錯誤只會發生在你擴充的那部分代碼上

        3.對抓取的高度控制性:

                 1)嚴格遵守爬蟲協議,使用者可以針對不同的Host配置不同的爬蟲策略

                 2)可以高度控制抓取速度、抓取規模、抓取時間等,甚至對不同的Host都可以不同的控制。

                 3)可以控制爬蟲無節制的抓取某一個Host。很多伺服器肯定無法承受爬蟲無節制的抓取,所以我們得需要在爬蟲上做一些控制,而Heritrix在這一方面做好。不僅可以通過控制抓取速度來控制,還可以控制對某一個Host的抓取速度

        4.功能齊全:

                1)有資料庫這樣的checkpoint,可以定時備份資料

                2)很好的日誌結構,可以使得它在某一次抓取之上繼續抓取,而避免了重複抓取的重複勞動

                2)很好的Web介面管理功能,並可以動態獲知抓取情況,如抓取速度,下載位元組數

        5.缺點:

                1)Heritrix適合互連網抓取,也就是抓取多個網站並整站複製。而對於垂直抓取,自身沒有這樣的機制,因為垂直抓取需要定時定點抓取資料,而Heritrix一旦抓取完畢就停止。而且自身的代碼也不適合垂直抓取,重複勞動太多。比如對URL的過濾,基本上8個處理器每個都需要過濾。而垂直抓取都是針對性的抽取URL,自然抽取到的URL是使用者想要的URL,無需過濾...

                2)Heritrix對中文支援不夠,比如URL中有中文的URL肯定抽取不到,但這個改動部分字碼頁就是它的Regex即可

                3)Heritrix使用多線程進行抓取,但抓取一段時間後會發現線程越來越少。因為Heritrix用調度中心管理要抓取的URL,將他們放入BDB資料庫中。比如當BDB資料庫中有10個URL而抓取的線程有25個的時候,那10個URL只能分配給10個線程抓取,另外15個線程會由於沒有URL可抓取可死掉。不過這一方面改動代碼也可以實現...

                4)很多人抓取一段時間後會發現Heritrix會莫名其妙的停掉,或者運行30個DNS就停止,而重新運行之後又好好的。首先Heritrix的停止是在沒有活動狀態的線程之後停止,而線程的死掉會因為上面一點。所以當發生網路問題時而導致網頁內容無法擷取時就會發生這種問題,因為無法擷取網頁內容就意味著抽取不到新的URL。Heritrix封裝了HttpClient去擷取網頁內容,這一塊有很多隱患,目前我也在研究解決中。

               5)綜合以上兩點就意味著Heritrix沒有很好的容錯性以及回複機制,只能自己改動代碼來改善這一點,比如Heritrix停止後可以延續上一次的抓取繼續抓取,當線程不夠可以自動補充....

 

 

       以上是我對Heritrix的看法,其中有很多很多值得我們學習的地方。比如讀取order.xml可以說是相當靈活....我想隨著自己對Heritrix的深入我對它的看法也會慢慢改變....這裡歡迎大家發表看法和意見...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.