问题描述
大家好,最近要写个基于爬虫的小工具,主要是爬行单个网站并解析数据保存其中需要的内容。我的想法是这样的,爬行线程从unsearchedUrl队列中取出url,去请求该url将获取的页面响应及其url存入到unparsedResponse队列中,解析线程从unparsedResponse队列中取出一条响应,分析该响应中包含的超链接,过滤掉重复的链接后存入unsearchedUrl队列中,当然,解析线程还要进行其他内容的提取。我这样做主要是为了提高性能,对每个url只进行一次网络访问。现在主要的问题是单个的线程实现了,可是爬行线程和解析线程同时多个进行不知该怎么弄,麻烦大家给分析分析,谢谢!下面是参考流程图。 问题补充:要是用ExecutorService线程池来做的话,那任务里应该是怎么写呢,我想把爬行和解析响应分开onlylau 写道
解决方案
你可以试下用线程池,取得的url可以放到队列中看看java.util.concurrent包下的相关类如线程池类:java.util.concurrent.ThreadPoolExecutor
解决方案二:
其实,我不是很看得懂楼主的意思,就随便谈谈,看看对楼主有没有什么启发:1.楼主可以弄一个监听线程,只要爬虫队列里有url,就生成一个线程,并且线程活动数加1线程完成的话,就要活动数减一。同理,对应解析线程。2.只要队列,跟活动数为0就是程序结束的标志。3.使用一定的同步机制,防止出错。
时间: 2025-01-20 13:13:59