作者obelisk0114 (追風箏的孩子)
看板java
標題[問題] java 多執行緒爬蟲
時間Fri Mar 30 16:51:56 2018
之前需要爬一些網站的評論而想了一個簡單的多執行緒爬蟲
但是覺得方法不漂亮,想問問其他更好的想法
需求: (由於效率問題,需要 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 用過即丟,感覺很浪費,想重複利用
對於上面問題想請教更好的做法
感謝各位大大
--
這是個最好的時代,也是個最壞的時代,是最光明的時代,也是最黑暗的時代
藏龍臥虎今懦夫,
鏡裡罪容化成無
人情冷暖難回首,
嘆留多少傷心事
一沙一世界,一花一天堂,掌中盈無限,剎那即永恆。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 47.149.227.123
※ 文章網址: https://www.ptt.cc/bbs/java/M.1522399948.A.3EA.html
→ Chienhua: 用ThreadPool重新利用並控管總Thread量 03/31 11:55
推 pupuliao: 我們公司就在做這個不過我沒接觸XD 03/31 12:29
→ pupuliao: 你把爬蟲數量 跟 任務(網頁連結)數量分開 03/31 12:30
→ pupuliao: 所有爬蟲都統一去任務池中取任務,找到新任務也丟進去 03/31 12:31
→ pupuliao: 這是我想到的方法 可以控制CPU 用量 03/31 12:31
推 v9290026: unblockingQueue 04/01 12:30
只有找到 BlockingQueue
※ 編輯: obelisk0114 (47.149.227.123), 04/01/2018 14:39:34
推 zephyrhymn: 很多系統都是用pooling去管理使用總量 04/02 10:26
→ zephyrhymn: 一直new thread對效能和時間也是浪費 04/02 10:26
→ ssccg: 一定要用thread pool,要不要控制總量(thread數上限)是一回 04/02 10:36
→ ssccg: 事,但另一個重點是重複利用不要一直new新的 04/02 10:36
→ ssccg: 至於記憶體不夠用那當然就只能不要存記憶體,用暫存檔最後 04/02 10:53
→ ssccg: 再組合也可以 04/02 10:53