在Prefetcher中取消robots.txt的限制
Robots.txt是一種專門用于搜索引擎網(wǎng)絡爬蟲的文件,當構造一個網(wǎng)站時,如果作者希望該網(wǎng)站的內(nèi)容被搜索引擎收錄,就可以在網(wǎng)站中創(chuàng)建一個純文本文件robots.txt,在這個文件中,聲明該網(wǎng)站不想被robot訪問的部分。這樣,該網(wǎng)站的部分或全部內(nèi)容就可以不被搜索引擎收錄了,或者指定搜索引擎只收錄指定的內(nèi)容。
Heritrix在其說明文檔中,表明它是一個完全遵守robots.txt協(xié)議的網(wǎng)絡爬蟲。這一點固然在宣傳上起到了一定的作用。但是,在實際的網(wǎng)頁采集過程中,這并不是一種最好的作法。因為大部分的網(wǎng)站并不會放置一個robots.txt文件以供搜索引擎讀取,在互聯(lián)網(wǎng)信息以幾何級數(shù)增長的今天,網(wǎng)站總是在希望自己的內(nèi)容不被人所利用的同時,又希望自己能夠被更多的用戶從搜索引擎上檢索到。
不過幸好,robots.txt協(xié)議本身只是一種附加的協(xié)議,網(wǎng)站本身并不能了解究竟哪些Socket聯(lián)接屬于爬蟲哪些屬于正常的瀏覽器連接。所以,不遵守robos.txt協(xié)議成為了更多搜索引擎的首選。
使用過Heritrix的朋友就會發(fā)現(xiàn)這樣一個問題,如果當一個網(wǎng)站沒有放置robots.txt文件時,Heritrix總是要花上大量的時間試圖去訪問這樣一個文件,甚至可能retry很多次。這無疑很大的降低了抓取效率。因此,為了提高抓取的效率,可以試著將對robots.txt的訪問部分去除。
在Heritrix中,對robots.txt文件的處理是處于PreconditionEnforcer這個Processor中的。PreconditionEnforcer是一個Prefetcher,當處理時,總是需要考慮一下當前這個鏈接是否有什么先決條件要先被滿足的,而對robots.txt的訪問則正好是其中之一。在PreconditionEnforcer中,有一個private類型的方法,它的方法簽名為:
private boolean considerRobotsPreconditions(CrawlURI curi)
PreconditionEnforcer文件的路徑是:org.archive.crawler.prefetch.PreconditionEnforcer.java。
?把PreconditionEnforcer.java中的private boolean considerRobotsPreconditions(CrawlURI curi){}修改為
1 private boolean considerRobotsPreconditions(CrawlURI curi) { 2 return false; 3 }或者把代碼的實現(xiàn)部分注釋掉,最后return語句改為return false;
該方法的含義為:在進行對參數(shù)所表示的鏈接的抓取前,看一下是否存在一個由robots.txt所決定的先決條件。很顯然,如果對每個鏈接都有這樣的處理。那么,很有可能導致整個抓取任務的失敗。因此,需要對它進行調(diào)整。
這個方法返回true時的含義為需要考慮robots.txt文件,返回false時則表示不需要考慮robots.txt文件,可以繼續(xù)將鏈接傳遞給后面的處理器。所以,最簡單的修改辦法就是將這個方法整個注釋掉,只留下一個false的返回值。經(jīng)過筆者的試驗,這種方法完全可行,抓取的速度提高了至少一半以上!
轉(zhuǎn)載于:https://www.cnblogs.com/zhjsll/p/4265477.html
總結(jié)
以上是生活随笔為你收集整理的在Prefetcher中取消robots.txt的限制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于target=标签
- 下一篇: LDPC译码算法代码概述