2015-10-07 54 views
0

我目前正在用我用Jsoup在Java中編寫的程序抓取網頁。該計劃需要挖掘約450個網址(這不算太多)。使用Jsoup抓取網頁時不穩定的下載速度(連接)

問題是,我得到非常不穩定的下載速度當刮。

例如,前7個網址,會得到刮瞬間2秒內有近1Mb/s的下載速度,但隨後的下載速度突然降低到0.4KB/s的EVEN 0KB/s,導致該程序需要13秒來抓取網址。這種波動不斷髮生,並導致程序嚴重放緩。

這不是我的互聯網連接問題,因爲它正與我的工作和家庭無線互聯網一起發生。即使當前網絡速度指示器顯示下載速度爲0KB/s,如果通過我的瀏覽器打開網頁,頁面立即加載,突然下載速度爲再次增加1MB /秒。但是這種增加對我的程序沒有影響,並且該程序對於刪除網址仍然非常緩慢。

可能是什麼問題?有什麼我需要配置,以確保我的scraping程序不斷下載速度?

在此先感謝!

回答

1

這是一個與外部資源緊密相關的標準問題(您需要下載的url)。

要解決它,您可以創建一個線程池,使同時下載不同的資源。同時下載給你更多的可能性,以達到你的帶寬限制,如果單一下載非常慢。

總下載時間將減少到更接近您的帶寬能力的值。

這裏有一個基本的簡單例子。

ServerSocket serverSocket = new ServerSocket(portNumber); 
Socket clientSocket = serverSocket.accept(); 

記得首先啓動服務器,然後啓動客戶端。


這裏有一些鏈接到線程池是可以作爲一個起點,以用來實現一個線程池在同一時間下載的網址:

+0

嗨。謝謝您的回答。你能夠向我提供有關使用線程下載的更多信息嗎?一個有用的教程的鏈接就足夠了!:) –

+0

我編輯了我的答案,給你一些出發點 –

+0

謝謝你的詳細解釋!我會毫不猶豫地檢查出來:) –

1

它可以b e該程序受限於內存。嘗試在啓動Java進程時增加堆空間。

+0

如何通過堆空間提高下載速度? –

+0

如果沒有空間來讀取響應,垃圾收集器將會試圖釋放空間。檢查是否是問題所在。 –

+0

同時檢查服務器響應本身是否緩慢。如果您知道速度較慢的網址,請嘗試在瀏覽器上打開它們並檢查響應時間。 –