CURL zum Herunterladen eines Verzeichnisses

38

Ich versuche, mit CURL ein vollständiges Website-Verzeichnis herunterzuladen. Der folgende Befehl funktioniert nicht:

curl -LO http://example.com/

Es gibt einen Fehler zurück: curl: Remote file name has no length!.

Aber wenn ich das tue: curl -LO http://example.com/someFile.typees funktioniert. Irgendeine Idee, wie man alle Dateien im angegebenen Verzeichnis herunterlädt? Vielen Dank.

Foo
quelle

Antworten:

33

Funktioniert bei mir immer, ohne übergeordnetes Element und rekursiv, um nur das gewünschte Verzeichnis zu erhalten.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY
stanzheng
quelle
1
Dies sollte die akzeptierte Antwort sein.
Juan Jimenez
Versucht, einen Ordner von Git herunterzuladen. Ich habe es versucht wget --no-parent -r http://WEBSITE.com/DIRECTORYund auch ohne --no-parent- hat nicht funktioniert.
Sam-T
32

HTTP kennt keine Verzeichnisse. Andere Schrägstriche als die ersten drei ( http://example.com/) haben keine besondere Bedeutung, außer in Bezug auf ..relative URLs. Solange der Server nicht einem bestimmten Format folgt, gibt es keine Möglichkeit, „alle Dateien im angegebenen Verzeichnis herunterzuladen“.

Wenn Sie die gesamte Site herunterladen möchten, sollten Sie alle Links auf der Hauptseite rekursiv durchlaufen. Curl kann es nicht, aber wget kann es. Dies funktioniert, wenn die Website nicht zu dynamisch ist (insbesondere werden keine Links angezeigt, die mit Javascript-Code erstellt wurden). Beginnen Sie mit wget -r http://example.com/und suchen Sie unter "Rekursive Abfrageoptionen" und "Rekursive Annahme- / Ablehnungsoptionen" im wget-Handbuch nach relevanteren Optionen (Rekursionstiefe, Ausschlusslisten usw.).

Wenn die Website versucht, automatisierte Downloads zu blockieren, müssen Sie möglicherweise die Zeichenfolge des Benutzeragenten ( -U Mozilla) ändern und ignorieren robots.txt(eine leere Datei erstellen example.com/robots.txtund die -ncOption verwenden, damit wget nicht versucht, sie vom Server herunterzuladen).

Gilles 'SO - hör auf böse zu sein'
quelle
Wie wget das kann. ??
Srikan
@Srikan wget analysiert den HTML-Code, um die darin enthaltenen Links zu finden, und lädt (eine Auswahl) dieser Links rekursiv herunter.
Gilles 'SO- hör auf böse zu sein'
Wenn die Dateien keine internen Links haben, werden beim rekursiven Download nicht alle Dateien abgerufen. Nehmen wir an, es gibt einen HTTP-Ordner mit einigen TXT-Dateien. Wird es gelingen, alle Dateien zu bekommen. Lassen Sie es mich nach diesem Kommentar versuchen
Srikan
@ Srikan HTTP hat kein Verzeichniskonzept. Rekursiver Download bedeutet das Folgen von Links auf Webseiten (einschließlich der vom Server generierten Webseiten, um eine Verzeichnisliste anzuzeigen, sofern der Webserver dies tut ).
Gilles 'SO- hör auf böse zu sein'
wget unterstützt das Ignorieren von robots.txt mit dem Flag -e robots=off. Alternativ können Sie das Herunterladen vermeiden, indem Sie es mit ablehnen -R "robots.txt".
Ryan Krage
17

In diesem Fall curlist NICHT das beste Werkzeug. Sie können wgetmit dem -rArgument wie folgt verwenden:

wget -r http://example.com/ 

Dies ist die einfachste Form, und Sie können auch zusätzliche Argumente verwenden. Weitere Informationen finden Sie in manpage( man wget).

marokkanisch
quelle
5

Das ist nicht möglich. Es gibt keine allgemein implementierte Standardmethode für einen Webserver, um den Inhalt eines Verzeichnisses an Sie zurückzugeben. Die meisten Server generieren einen HTML-Index eines Verzeichnisses, sofern dies konfiguriert ist. Diese Ausgabe ist jedoch weder Standard noch wird sie auf irgendeine Weise garantiert. Sie können diesen HTML-Code analysieren. Beachten Sie jedoch, dass sich das Format von Server zu Server ändert und nicht immer aktiviert ist.

Brad
quelle
Schauen Sie sich diese App namens Site Sucker an. sitesucker.us . Wie machen Sie das?
Foo
Sie analysieren die HTML-Datei und laden jeden darin enthaltenen Link herunter.
Brad
Mit wgetoder curl?
Foo
7
@Brad: curl parst das HTML nicht, aber wget tut genau das (es heißt rekursives Abrufen).
Gilles 'SO - hör auf, böse zu sein'
1
Ah, nun, ich stehe korrigiert da! gnu.org/software/wget/manual/html_node/… OP sollte sich darüber im Klaren sein, dass dies immer noch nicht das ist, wonach er sucht ... es folgt nur Links, die auf den zurückgegebenen Seiten verfügbar sind.
Brad
2

Sie können die Firefox-Erweiterung DownThemAll! Hiermit können Sie alle Dateien in einem Verzeichnis mit einem Klick herunterladen. Es ist auch anpassbar und Sie können angeben, welche Dateitypen heruntergeladen werden sollen. Dies ist der einfachste Weg, den ich gefunden habe.

Asdf
quelle
0

Möglicherweise finden Sie hier eine Verwendung für einen Website-Ripper. Dadurch wird alles heruntergeladen und der Inhalt / die internen Links werden für die lokale Verwendung geändert. Eine gute finden Sie hier: http://www.httrack.com

Gaurav Joseph
quelle