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 , vi
um 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 perl
Web-Bot mit dem libwww-perl
Modul (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');