[问题] 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