webentwicklung-frage-antwort-db.com.de

Speichern Sie eine einzelne Webseite (mit Hintergrundbildern) mit Wget

Ich möchte Wget verwenden, um einzelne Webseiten (nicht rekursiv, nicht ganze Websites) als Referenz zu speichern. Ähnlich wie bei Firefox "Web Page, complete".

Mein erstes Problem ist: Ich kann Wget nicht dazu bringen, im CSS angegebene Hintergrundbilder zu speichern. Selbst wenn die Hintergrundbilddateien gespeichert würden, würde --convert-links die Hintergrundbild-URLs in der CSS-Datei nicht so konvertieren, dass sie auf die lokal gespeicherten Hintergrundbilder verweisen. Firefox hat das gleiche Problem.

Mein zweites Problem ist: Wenn auf der Seite, die ich speichern möchte, Bilder vorhanden sind, die auf einem anderen Server gehostet sind (z. B. Anzeigen), werden diese nicht berücksichtigt. --span-hosts scheint das Problem mit der folgenden Zeile nicht zu lösen.

Ich benutze: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-Host-directories -erobots=off http://domain.tld/webpage.html

69
user14124

Von der Wget-Manpage :

Um eine einzelne Seite und alle erforderlichen Elemente herunterzuladen (auch wenn sie auf separaten Websites vorhanden sind) und sicherzustellen, dass das Los lokal korrekt angezeigt wird, verwendet dieser Autor neben "-p" gern einige weitere Optionen:

wget -E -H -k -K -p http://www.example.com/

Auch für den Fall, dass robots.txt nicht erlaubt ist, fügen Sie -e robots=off hinzu

103
vvo

Der Befehl wget bietet die Option --mirror, die dasselbe bewirkt wie:

$ wget -r -N -l inf --no-remove-listing

Sie können auch -x eingeben, um eine ganze Verzeichnishierarchie für die Site zu erstellen, einschließlich des Hostnamens.

Möglicherweise können Sie dies nicht finden, wenn Sie nicht die neueste Version von wget verwenden.

7
Ernie Dunbar

Es hört sich so an, als würden wget und Firefox das CSS nicht nach Links durchsuchen, um diese Dateien in den Download aufzunehmen. Sie können diese Einschränkungen umgehen, indem Sie nach Möglichkeit suchen und die Verknüpfungsextraktion aus einem beliebigen CSS oder JavaScript in den heruntergeladenen Dateien per Skript ausführen, um eine Liste der fehlenden Dateien zu erstellen. Dann könnte eine zweite Ausführung von wget in dieser Liste von Links erfassen, was auch immer übersehen wurde (verwenden Sie das Flag -i, um eine Dateilisten-URL anzugeben).

Wenn Sie Perl mögen, gibt es ein CSS :: Parser Modul im CPAN, mit dem Sie auf einfache Weise Links auf diese Weise extrahieren können.

Beachten Sie, dass wget nur bestimmte HTML-Markups (href/src) und CSS-URLs (url()) analysiert, um zu bestimmen, welche Seitenanforderungen abgerufen werden müssen. Sie können Firefox-Addons wie DOM Inspector oder Firebug verwenden, um herauszufinden, ob die Bilder von Drittanbietern, die Sie nicht erhalten, über Javascript hinzugefügt werden. In diesem Fall müssen Sie auf ein Skript oder ein Firefox-Plugin zurückgreifen, um sie zu erhalten auch.

2
quack quixote

Ich habe Webtography für einen ähnlichen Zweck erstellt: https://webjay.github.io/webtography/

Es verwendet Wget und verschiebt die Site in ein Repository auf Ihrem GitHub-Konto.

Ich benutze diese Argumente:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

2
webjay