Abrufen aller Dateien von einer Webseite mithilfe von Curl

86

Ich möchte die Dateien auf einmal von der folgenden Seite herunterladen curl: http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Ich habe es versucht curl http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/und es hat ein paar Zeilen im Terminal zurückgegeben, aber keine Dateien erhalten.

Thi G.
quelle

Antworten:

125

Verwenden Sie wgetstattdessen. Sie können es mit installieren, brew install wgetwenn Sie Homebrew oder sudo port install wgetMacPorts installiert haben.

Verwenden Sie zum Herunterladen von Dateien aus einer Verzeichnisliste -r(rekursiv) -np(folgen Sie keinen Links zu übergeordneten Verzeichnissen) und -kstellen Sie sicher, dass Links in heruntergeladenem HTML oder CSS auf lokale Dateien verweisen (credit @xaccrocheur).

wget -r -np -k http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/

Andere nützliche Optionen:

  • -nd (keine Verzeichnisse): Alle Dateien in das aktuelle Verzeichnis herunterladen
  • -e robots.off: robots.txt-Dateien ignorieren, robots.txt-Dateien nicht herunterladen
  • -A png,jpg: Akzeptiere nur Dateien mit den Endungen pngoderjpg
  • -m (Spiegel): -r --timestamping --level inf --no-remove-listing
  • -nc, --no-clobber: Download überspringen, wenn Dateien vorhanden sind
Lri
quelle
3
wget -r -np -k http://your.website.com/specific/directory. Der Trick besteht darin -k, die Verknüpfungen (Bilder usw.) für die lokale Anzeige zu konvertieren.
yPhil
brewund portfunktioniert nicht für mich, wget zu installieren. Was soll ich machen?
Hoseyn Heydari
@HoseynHeydari: Sie können rudix.org für kompilierte Binärdateien für osx verwenden. Sie müssen also rudix installieren und dann verwenden: sudo rudix install wget
Mamonu
Die Option -kfunktioniert nicht immer. Wenn Sie beispielsweise zwei Links haben, die auf dieselbe Datei auf der Webseite verweisen, die Sie rekursiv erfassen möchten, wgetscheint nur der Link der ersten Instanz konvertiert zu werden, nicht der zweite.
Kun
22

curlWenn Sie nur einzelne Webseiten-Dateien lesen können, ist die Anzahl der Zeilen, die Sie erhalten, der Verzeichnisindex (den Sie auch in Ihrem Browser sehen, wenn Sie zu dieser URL gehen). Um zu benutzen curlund einige Unix-Tools zu zaubern, um die Dateien zu bekommen, könnten Sie so etwas wie verwenden

for file in $(curl -s http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/ |
                  grep href |
                  sed 's/.*href="//' |
                  sed 's/".*//' |
                  grep '^[a-zA-Z].*'); do
    curl -s -O http://www.ime.usp.br/~coelho/mac0122-2013/ep2/esqueleto/$file
done

Dadurch werden alle Dateien in das aktuelle Verzeichnis verschoben.

Für detailliertere Anforderungen (einschließlich des Abrufens einer Reihe von Dateien von einer Site mit Ordnern / Verzeichnissen) ist wget(wie bereits in einer anderen Antwort vorgeschlagen) die bessere Option.

Nohillside
quelle
Danke. Dies ist eine schöne Lösung und das Bereitstellen eines Arbeitsbeispiels ist großartig!
Egelev
1
xmllint --html --xpath '//a/@href'ist wahrscheinlich ein besserer Parser als grep.
5.
7

Ref: http://blog.incognitech.in/download-files-from-apache-server-listing-directory/

Sie können folgenden Befehl verwenden:

wget --execute="robots = off" --mirror --convert-links --no-parent --wait=5 <website-url>

Erklärung zu den einzelnen Optionen

  • wget: Einfacher Befehl, um CURL-Anforderungen zu stellen und entfernte Dateien auf unseren lokalen Computer herunterzuladen.
  • --execute="robots = off": Dies ignoriert die robots.txt-Datei beim Crawlen durch Seiten. Es ist hilfreich, wenn Sie nicht alle Dateien erhalten.
  • --mirror: Diese Option spiegelt im Wesentlichen die Verzeichnisstruktur für die angegebene URL wider. Es ist eine Abkürzung für -N -r -l inf --no-remove-listingdie bedeutet:
    • -N: Dateien nur dann erneut abrufen, wenn sie neuer als lokal sind
    • -r: Geben Sie den rekursiven Download an
    • -l inf: maximale Rekursionstiefe (inf oder 0 für unendlich)
    • --no-remove-listing: Entfernen Sie keine .listing-Dateien
  • --convert-links: Links in heruntergeladenem HTML oder CSS verweisen auf lokale Dateien
  • --no-parent: Nicht in das übergeordnete Verzeichnis aufsteigen
  • --wait=5: Warten Sie zwischen den Abrufen 5 Sekunden. Damit wir den Server nicht verprügeln.
  • <website-url>: Dies ist die Website-URL, von der die Dateien heruntergeladen werden.

Viel Spaß beim Herunterladen: smiley:

Udit Desai
quelle
3

Sie können httrack verwenden, das für Windows / MacOS verfügbar und über Homebrew installierbar ist.

user242053
quelle
etwas neues für mich, danke. das beste ist es ist schnell und schnell: one-liner. Schneiden Sie einfach das Fett und vermeiden Sie jeglichen Müll.
Peter Teoh
0

Für diejenigen von uns, die lieber eine Anwendung mit einer grafischen Benutzeroberfläche verwenden möchten , gibt es das kostengünstige Shareware-Programm DeepVacuum für Mac OS X , das wgetbenutzerfreundlich implementiert wird und eine Liste von Voreinstellungen enthält, die für häufig benötigte Aufgaben geeignet sind. Sie können auch Ihre eigenen benutzerdefinierten Konfigurationen als Voreinstellungen speichern.

Bildbeschreibung hier eingeben


quelle