2014-09-29 267 views
1

我使用Crawler4j爬蟲爬取一些domains.Now我想要提高抓取工具的效率,我希望我的抓取工具使用我的完整帶寬並抓取儘可能多的url在給定爲此,我正在採取以下設置: -提高Crawler4j-Crawler效率,可伸縮性

  • 我增加了no。
  • 我已禮貌延遲減小到50毫秒(使用Crawlconfig.setpolitenessdelay(50););履帶線程10(使用此功能ContentCrawler( 'classfilename',10))的
  • 我給爬行的深度如2(使用Crawlconfig.setMaxDepthOfCrawling(2))

現在我想知道的是: -

1)是否有任何副作用,這些種類的設置。

2)除此之外,我還有什麼需要做的,以便提高履帶車速度。

3)有人可以告訴我每個設置的最大限制(例如: - 一次支持crawler4j的最大線程數等)。因爲我已經瀏覽了Crawler4j的代碼,但是我沒有找到任何限制任何地方。

4)如何抓取域名而不檢查它的robots.txt文件。因爲我明白crawler4j首先檢查域名的robots.txt文件,然後才能抓取。我不想那麼做!

5)如何頁面提取器作品(請簡單介紹一下它)

任何幫助表示讚賞,並請寬容我,如果這個問題是愚蠢的。

回答

2

我會盡我所能在這裏幫助你。我不能保證正確性和完整性。

  1. b)減少了politness延遲將在網站上創建更多的負載抓取,可以(在小型服務器)增加長期recieving時間。但是現在這不是一個普遍的問題,所以50ms應該沒問題。另請注意,如果從Web服務器接收響應需要250ms,則該線程將抓取下一頁的時間爲250ms。

    c)我不太清楚你想將crawlDepth設置爲2的值。例如。從1開始的爬行深度意味着你爬行的種子比爬到種子上發現的每個站點都要難,而且你不會停下來。 (crawlDepth = 2只會更進一步,等等)。這不會影響您的抓取速度,只會影響抓取時間和找到的網頁。

  2. 請勿在CrawlerThread及其覆蓋的所有方法/類中執行時間繁重的操作。在最後或在一個額外的線程中執行它們。

  3. 抓取工具配置本身沒有限制。限制將由您的CPU設置(不太可能)或要抓取的網站結構(很可能)。

  4. 此行添加到您的CrawlController:robotstxtConfig.setEnabled(false);

看起來應該是現在這個樣子:

PageFetcher pageFetcher = new PageFetcher(config); 
RobotstxtConfig robotstxtConfig = new RobotstxtConfig(); 
robotstxtConfig.setEnabled(false); 
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher); 
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer); 
  • 的網頁抓取工具會設置一些參數然後使用先前設置的參數將HTTPget請求發送到給定url上的web服務。將評估來自網絡服務器的響應,並保存二進制形式的響應頭和HTML代碼等信息。
  • 希望我可以幫你一下。

    +0

    感謝Tobias對你的回答。你已經回答了我的大部分問題,他們的工作很好。但我不明白你的答案。 這可以解釋得更清楚。 – 2014-10-07 06:49:36

    +0

    對1.c的解釋: - 是的,你說的是絕對正確的。我們已經完成對一個域的爬行的速度,取決於深度爬行。這是我提到的! – 2014-10-07 06:56:14

    +0

    如果您開始抓取,抓取工具會自行初始化,從數據庫中獲取一些URL,開始抓取一個,解析這個URL然後在某個時間點到達Crawler.class中的「訪問(頁面)」方法。您不應該執行任何類似I/O或其他代碼,這將在整個爬行過程中花費很長時間,因爲這會阻止您的爬蟲線程。不要將複雜的對象添加到爬網程序內部使用的類,例如WebURL或Page。 – 2014-10-07 07:41:31