Laden Sie mit wget eine beliebige Anzahl von Dateien aus einem selbstumleitenden Verzeichnis herunter

Laden Sie mit wget eine beliebige Anzahl von Dateien aus einem selbstumleitenden Verzeichnis herunter

Ich muss mit wget eine sehr große Anzahl PDF-Dateien von der Website meiner Universität herunterladen (es wäre mühsam, wenn nicht unmöglich, alle Links zu sammeln und zusammenzustellen), mit Links wie diesen:

http://example.edu/path_to_directory/directory/foobar.pdf

Ich verwende den folgenden Befehl:

wget -mk --no-check-certificate --load-cookies cookies.txt  http://example.edu/arbitrary_link_to_directory/directory/

Leider leiten die eigentlichen Verzeichnisse, die die PDFs enthalten, jeweils auf eine Fehlerseite weiter, und ich erhalte nur einen Haufen HTML- und CSS-Dateien.

http://example.edu/path_to_directory/directory/

würde in einem Browser eine Weiterleitung zu

http://example.edu/path_to_directory/error/error.html

Wäre es überhaupt möglich, alle betreffenden Dateien mit wget herunterzuladen?

Antwort1

Wenn ich eine Reihe von Dateien von einer Website herunterladen möchte, die mir das nicht leicht macht (oder es aktiv erschwert), erstelle ich eine Liste mit den URLs der Dateien, etwa so:

lynx -dump -listonly $URL | awk '/\.pdf/ {print $2}' > /tmp/pdflist.txt

Normalerweise bearbeite ich die Datei dann mit , vium Einträge zu löschen, die ich nicht herunterladen möchte, und hole sie schließlich alle mit wget:

wget --input-file=/tmp/pdflist.txt

Das funktioniert gut für einfache Aufgaben und oft auch gut genug für mittelschwere Aufgaben ... aber für schwierige Aufgaben, bei denen es um die Analyse von kompliziertem HTML und das Verfolgen von Links geht (und vielleicht Cookies verwendet werden), schreibe ich einen perlWeb-Bot mit dem libwww-perlModul (auch bekannt alsLWP).

Antwort2

Auf deiner Uni-Website gibt es eine Seite mit Links zu allen PDFs? Oder woher kennst du die Liste der PDF-Dateinamen?

In diesem Fall müssen Sie ein Skript namens Scraper schreiben, um programmgesteuert Links von dieser Seite abzurufen und dann automatisch diese Liste zu durchlaufen und sie mit wget oder einem anderen Tool herunterzuladen. Ich würde PHP oder Python vorschlagen, um den Scraper zu schreiben. Sie können die endgültige Paginierung auf der Ursprungswebsite ganz einfach verwalten. Wenn Sie PHP verwenden, können Sie Dateien einfach mit

file_put_contents('Zieldateiname', file_get_contents('Quell-URL');

verwandte Informationen