我正在尝试在Jsoup中创建简单的爬虫。它找到网站源代码中的所有链接,并最终跟随它们,再次在每个链接中搜索新链接等等。
问题是在超过两个重定向后计算时间很长。
这是它的工作方式的伪代码:
function follow_links(String[] links)
{
for(int i=0; i<=links.amount-1; i++)
{
Document doc = Jsoup.connect(links[i]);
String[] newlinks = new String[max];
newlinks = parse(doc);
...
}
}
我的问题是,如果我在循环的每次迭代中创建新的Thread,代码是否会更快,因此所有连接都将并行建立。连接函数返回需要一些时间,所以我假设队列已经形成。线程可以解决这个问题吗?
答案 0 :(得分:0)
我不这么认为。如果您的应用程序通过1000个链接,您将创建1000个线程,这将破坏您的整个应用程序性能。检查一下以了解更多LINK ABOUT THREADS
最好保留一个线程池并进行搜索&#39;提交任务。使用ExecutorServices的CompletableFuture似乎是解决方案。
这是关于Stack的主题,其中一个人试图将相同的想法实现到他的爬虫中。 LINK