我在寫一個多線程的Java Web爬蟲。根據我對網絡的理解,當用戶加載網頁時,瀏覽器請求第一個文檔(例如index.html),並且當它接收到HTML時,它將查找需要包含的其他資源(圖像,CSS,JS )並同時要求這些資源。我應該可以同時打開多少個Java HttpURLConnections?
我的搜尋器只請求原始文檔。出於某種原因,我無法每5秒鐘刮掉2到5頁。我爲每個HttpURLConnection創建一個新線程。我似乎應該至少能夠每秒鐘掃描20-40頁。如果我嘗試啓動100個線程,那麼I/O異常就像瘋了一樣。任何想法發生了什麼?
考慮到許多服務器限制同一IP訪問的限制。對於爬蟲至少在請求之間等待半秒或一秒鐘,這是標準做法。另請查看archive.org的抓取工具Heritrix。它是開源的,用Java編寫。很好。 – 2009-09-04 22:37:56