2009-03-19 11 views
0

Ich muss ein Programm zum Herunterladen der Webseiten, das heißt, ich gebe eine Webseite zu der Software und es würde alle Dateien auf der Website herunterladen.Java gleichzeitige rekursive Website herunterladen

Ich würde auch eine Ebene der Tiefe übergeben, das heißt, die Ebene, auf der die Software geht Download jeder Datei der Website.

Ich werde diese Software in Java entwickeln und ich muss auch Nebenläufigkeit verwenden.

Bitte, sagen Sie mir Ihre Meinung darüber, wie dies zu tun ist.

Danke für die Hilfe.


Danke an alle für die Hilfe.

Ich muss noch etwas fragen. Wie kann ich eine Datei von der Website herunterladen?

Thaks noch einmal. = D

+1

Warum müssen Sie dies in Java tun? Warum musst du ein neues Programm schreiben, um dies zu tun, wenn es viele da draußen wie Wget oder Curl gibt? – Elijah

Antwort

2

Eine sehr nützliche Bibliothek für Spinnen und Bots: htmlunit

+0

Zwar gibt es Unmengen von Bibliotheken, um so etwas zu tun, htmlunit war immer auch mein Favorit, vielleicht kombiniert mit einem anderen Parser wie Tagsoup (html) oder xom (xml). – lucas

0

Nun, das ist ein bisschen schwer zu beantworten, ohne zu wissen, wie detaillierte Anleitung Sie brauchen, aber hier ist ein Überblick. :)

Java macht solche Anwendungen recht einfach, da sowohl HTTP-Requests als auch Threading problemlos verfügbar sind. Meine Lösung würde wahrscheinlich einen globalen Stapel umfassen, der neue URLs enthält, und eine Farm mit einer konstanten Anzahl von Threads, die URLs aus dem Stapel poppen. Ich würde die URLs als ein benutzerdefiniertes Objekt speichern, damit ich die Tiefe verfolgen kann.

Ich denke, Ihr Hauptproblem hier wird mit Websites sein, die nicht reagiert oder nicht dem HTTP-Standard folgt. Ich habe viele Male in ähnlichen Anwendungen bemerkt, dass diese manchmal nicht richtig auslaufen und schließlich alle Threads blockieren. Leider habe ich hier keine guten Lösungen.

einige nützliche Klassen als Ausgangspunkt:
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

0

Ich würde am Java Executors Paket einen Blick. Sie erstellen eine Reihe von Aufgaben (Runnable s) und übergeben sie an einen geeigneten ausgewählten Executor. Sie erhalten eine Future zurück und Sie können dies für sein Ergebnis abfragen.

Der Executor koordiniert, wenn dieses Runnable ausgeführt wird. Es gibt Implementierungen für Singlethread-Executoren, Executoren mit einem Thread-Pool usw. Sie brauchen sich also (zu) nicht darum zu kümmern. die Threading-Feinheiten. Die Nebenläufigkeitsdienstprogramme kümmern sich darum für Sie.

Apache HTTP Client wird sich um die HTTP-Abfrage für Sie kümmern.

Verwandte Themen