[問題] java 多執行緒爬蟲

看板java作者 (追風箏的孩子)時間6年前 (2018/03/30 16:52), 6年前編輯推噓3(309)
留言12則, 5人參與, 6年前最新討論串1/1
之前需要爬一些網站的評論而想了一個簡單的多執行緒爬蟲 但是覺得方法不漂亮,想問問其他更好的想法 需求: (由於效率問題,需要 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

03/31 11:55, 6年前 , 1F
用ThreadPool重新利用並控管總Thread量
03/31 11:55, 1F

03/31 12:29, 6年前 , 2F
我們公司就在做這個不過我沒接觸XD
03/31 12:29, 2F

03/31 12:30, 6年前 , 3F
你把爬蟲數量 跟 任務(網頁連結)數量分開
03/31 12:30, 3F

03/31 12:31, 6年前 , 4F
所有爬蟲都統一去任務池中取任務,找到新任務也丟進去
03/31 12:31, 4F

03/31 12:31, 6年前 , 5F
這是我想到的方法 可以控制CPU 用量
03/31 12:31, 5F

04/01 12:30, 6年前 , 6F
unblockingQueue
04/01 12:30, 6F
只有找到 BlockingQueue ※ 編輯: obelisk0114 (47.149.227.123), 04/01/2018 14:39:34

04/02 10:26, 6年前 , 7F
很多系統都是用pooling去管理使用總量
04/02 10:26, 7F

04/02 10:26, 6年前 , 8F
一直new thread對效能和時間也是浪費
04/02 10:26, 8F

04/02 10:36, 6年前 , 9F
一定要用thread pool,要不要控制總量(thread數上限)是一回
04/02 10:36, 9F

04/02 10:36, 6年前 , 10F
事,但另一個重點是重複利用不要一直new新的
04/02 10:36, 10F

04/02 10:53, 6年前 , 11F
至於記憶體不夠用那當然就只能不要存記憶體,用暫存檔最後
04/02 10:53, 11F

04/02 10:53, 6年前 , 12F
再組合也可以
04/02 10:53, 12F
文章代碼(AID): #1QlVhCFg (java)
文章代碼(AID): #1QlVhCFg (java)