2012-01-10 47 views

回答

6

crawler4j自動爲您執行此過程。您首先添加一個或多個種子頁面。這些是首先獲取和處理的頁面。 crawler4j然後提取這些頁面中的所有鏈接,並將它們傳遞給shouldVisit函數。如果你真的想抓取所有的函數,這個函數應該在所有函數上返回true。如果您只想抓取特定網域中的網頁,則可以檢查該網址並根據該網址返回true或false。

然後,您的shouldVisit返回true的URL將由抓取程序線程抓取,並對其執行相同的過程。

示例代碼here是一個很好的啓動示例。

+0

這很完美,謝謝! – seinecle 2012-01-11 09:08:38

2

一般的方法是根據您的內存要求(即您想要用於存儲所有這些信息的最大RAM),將抓取和下載任務分離爲單獨的工作線程,並使用最大數量的線程。

但是,crawler4j已經爲您提供此功能。通過將下載和抓取拆分爲單獨的線程,您可以嘗試最大限度地利用連接,將連接能夠處理的數據拉下來,並且提供信息的服務器可以發送給您。對此的自然限制是,即使您產生了1,000個線程,如果服務器僅以每秒0.3k的速度向您提供內容,那麼您仍將下載每秒僅300 KB的內容。但恐怕你對這方面沒有任何控制權。

另一種提高速度的方法是在具有較胖管道的系統上運行爬蟲到互聯網,因爲我猜你的最大下載速度是當前獲取數據速度的限制因素。例如,如果您在AWS實例(或任何雲應用程序平臺)上運行爬網,您將從與骨幹網的高速連接中受益,並縮短爬網一組網站所花費的時間有效地擴展您的帶寬遠遠超出您在家庭或辦公室連接中所獲得的帶寬(除非您在ISP工作)。

理論上可能的情況是,在管道非常大的情況下,對於要保存到本地(或網絡)磁盤存儲的任何數據,限制開始成爲磁盤的最大寫入速度。

相關問題