[問題] java 多執行緒爬蟲

作者: obelisk0114 (追風箏的孩子)   2018-03-30 16:51:56
之前需要爬一些網站的評論而想了一個簡單的多執行緒爬蟲
但是覺得方法不漂亮,想問問其他更好的想法
需求: (由於效率問題,需要 multithreading)
將許多網站連結(存在一個 List 裡面)裡面的評論全部爬下來
每個網站存成一個檔案,例如:txt
評論中會有連結連到其他文章,連文章一併爬下來
但是需要存到這個網站的檔案
ex: A 網站爬下來的資料存成 A.txt
裡面有評論連到 B 文章,需將 B 文章存進 A.txt 的相對位置
(就是那個評論那裏)
我之前的想法:
將 List 裡面的網站做 Multithreading
用一個暫時的 List 存爬下來的資料
碰到連結在 List 裡面做記錄,並把連結存到另一個 List
爬完這個網站之後將存連結的 List 做 multithreading
爬回來的文章寫回存資料的暫時 List
全部連結爬完之後將這個暫時 List 寫到 txt
問題:
1. 假如正在爬的幾個網站評論很多,記憶體用量可觀,而且 Threads 數量會很多
較難估計 CPU 使用
2. 每個網站產生完 threads 用過即丟,感覺很浪費,想重複利用
對於上面問題想請教更好的做法
感謝各位大大
作者: Chienhua (MeMoRi_SaUNDo)   2018-03-31 11:55:00
用ThreadPool重新利用並控管總Thread量
作者: pupuliao (pupu)   2018-03-31 12:29:00
我們公司就在做這個不過我沒接觸XD你把爬蟲數量 跟 任務(網頁連結)數量分開所有爬蟲都統一去任務池中取任務,找到新任務也丟進去這是我想到的方法 可以控制CPU 用量
作者: v9290026 (CH)   2018-04-01 12:30:00
unblockingQueue
作者: zephyrhymn   2018-04-02 10:26:00
很多系統都是用pooling去管理使用總量一直new thread對效能和時間也是浪費
作者: ssccg (23)   2018-04-02 10:36:00
一定要用thread pool,要不要控制總量(thread數上限)是一回事,但另一個重點是重複利用不要一直new新的至於記憶體不夠用那當然就只能不要存記憶體,用暫存檔最後再組合也可以

Links booklink

Contact Us: admin [ a t ] ucptt.com