heritrix中在Prefetcher中取消robots.txt的限制

在Prefetcher中取消robots.txt的限制

Robots.txt是一種專門用於搜索引擎網 絡爬蟲的文件,當構造一個網站時,如果作者希望該網站的內容被搜索引擎收錄,就可以在網站中創建一個純文本文件robots.txt,在這個文件中,聲明 該網站不想被robot訪問的部分。這樣,該網站的部分或全部內容就可以不被搜索引擎收錄了,或者指定搜索引擎只收錄指定的內容。

Heritrix在其說明文檔中,表明它是一個 完全遵守robots.txt協議的網絡爬蟲。這一點固然在宣傳上起到了一定的作用。但是,在實際的網頁採集過程中,這並不是一種最好的作法。因爲大部分 的網站並不會放置一個robots.txt文件以供搜索引擎讀取,在互聯網信息以幾何級數增長的今天,網站總是在希望自己的內容不被人所利用的同時,又希 望自己能夠被更多的用戶從搜索引擎上檢索到。

不過幸好,robots.txt協議本身只是一種附加的協議,網站本身並不能瞭解究竟哪些Socket聯接屬於爬蟲哪些屬於正常的瀏覽器連接。所以,不遵守robos.txt協議成爲了更多搜索引擎的首選。

使用過Heritrix的朋友就會發現這樣一個 問題,如果當一個網站沒有放置robots.txt文件時,Heritrix總是要花上大量的時間試圖去訪問這樣一個文件,甚至可能retry很多次。這 無疑很大的降低了抓取效率。因此,爲了提高抓取的效率,可以試着將對robots.txt的訪問部分去除。

在Heritrix中,對robots.txt 文件的處理是處於PreconditionEnforcer這個Processor中的。PreconditionEnforcer是一個 Prefetcher,當處理時,總是需要考慮一下當前這個鏈接是否有什麼先決條件要先被滿足的,而對robots.txt的訪問則正好是其中之一。在 PreconditionEnforcer中,有一個private類型的方法,它的方法簽名爲:

private boolean considerRobotsPreconditions(CrawlURI curi)

該方法的含義爲:在進行對參數所表示的鏈接的抓取前,看一下是否存在一個由robots.txt所決定的先決條件。很顯然,如果對每個鏈接都有這樣的處理。那麼,很有可能導致整個抓取任務的失敗。因此,需要對它進行調整。

這個方法返回true時的含義爲需要考慮 robots.txt文件,返回false時則表示不需要考慮robots.txt文件,可以繼續將鏈接傳遞給後面的處理器。所以,最簡單的修改辦法就是 將這個方法整個註釋掉,只留下一個false的返回值。經過筆者的試驗,這種方法完全可行,抓取的速度提高了至少一半以上!
發佈了69 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章