Java并发递归网站下载

时间:2009-03-19 10:48:31

标签: java concurrency

我需要做一个程序来下载网页,也就是说,我给网页提供了一个网页,它会下载网站上的所有文件。

我也会通过一定程度的深度,即软件下载网站每个文件的级别。

我将用Java开发这个软件,我也需要使用并发。

请告诉我你对如何做到这一点的看法。

感谢您的帮助。


感谢大家的帮助。

我还需要再问一件事。如何从网站下载文件?

再来一次。 = d

4 个答案:

答案 0 :(得分:2)

一个非常有用的蜘蛛和机器人库:htmlunit

答案 1 :(得分:0)

嗯,如果不知道你需要多详细的指导,这有点难以回答,但这里是一个概述。 :)

实际上,Java使这些应用程序非常容易,因为HTTP请求和线程都很容易获得。我的解决方案可能涉及一个包含新url的全局堆栈,以及一个从堆栈中弹出url的常量线程的服务器场。我将网址存储为自定义对象,以便我可以跟踪深度。

我认为您的主要问题是网站没有响应,或者没有遵循HTTP标准。我已经在类似的应用程序中多次注意到,有时它们没有正常超时,最终它们最终会阻塞所有线程。不幸的是,我在这里没有任何好的解决方案。

一些有用的课程作为起点:
http://java.sun.com/javase/6/docs/api/java/lang/Thread.html
http://java.sun.com/javase/6/docs/api/java/lang/ThreadGroup.html
http://java.sun.com/javase/6/docs/api/java/net/URL.html
http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html

答案 2 :(得分:0)

答案 3 :(得分:0)

我会看一下Java Executors包。您创建一组任务(Runnable s)并将它们传递给合适的Executor。你得到一个Future,然后你可以查询它的结果。

Executor将在执行此Runnable时进行协调。对于单线程执行程序,具有线程池等的执行程序,存在实现。因此,您不必担心(太多)wrt。线程错综复杂。并发实用程序将为您提供此服务。

Apache HTTP Client将为您提供HTTP查询。