作者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://webptt.com/cn.aspx?n=bbs/java/M.1522399948.A.3EA.html
1F:→ Chienhua: 用ThreadPool重新利用并控管总Thread量 03/31 11:55
2F:推 pupuliao: 我们公司就在做这个不过我没接触XD 03/31 12:29
3F:→ pupuliao: 你把爬虫数量 跟 任务(网页连结)数量分开 03/31 12:30
4F:→ pupuliao: 所有爬虫都统一去任务池中取任务,找到新任务也丢进去 03/31 12:31
5F:→ pupuliao: 这是我想到的方法 可以控制CPU 用量 03/31 12:31
6F:推 v9290026: unblockingQueue 04/01 12:30
只有找到 BlockingQueue
※ 编辑: obelisk0114 (47.149.227.123), 04/01/2018 14:39:34
7F:推 zephyrhymn: 很多系统都是用pooling去管理使用总量 04/02 10:26
8F:→ zephyrhymn: 一直new thread对效能和时间也是浪费 04/02 10:26
9F:→ ssccg: 一定要用thread pool,要不要控制总量(thread数上限)是一回 04/02 10:36
10F:→ ssccg: 事,但另一个重点是重复利用不要一直new新的 04/02 10:36
11F:→ ssccg: 至於记忆体不够用那当然就只能不要存记忆体,用暂存档最後 04/02 10:53
12F:→ ssccg: 再组合也可以 04/02 10:53