Speichern Sie eine einzelne Webseite (mit Hintergrundbildern) mit Wget

87569
user14124

Ich möchte Wget verwenden, um einzelne Webseiten (nicht rekursiv, nicht ganze Websites) als Referenz zu speichern. Ähnlich wie Firefoxs "Webseite, komplett".

Mein erstes Problem ist: Ich kann Wget nicht dazu bringen, in CSS definierte Hintergrundbilder zu speichern. Selbst wenn die Hintergrundbilddateien gespeichert wurden, glaube ich nicht, dass --convert-links die Hintergrundbild-URLs in der CSS-Datei so konvertiert, dass sie auf die lokal gespeicherten Hintergrundbilder zeigen. Firefox hat das gleiche Problem.

Mein zweites Problem ist: Wenn sich Bilder auf der Seite befinden, die ich speichern möchte, die auf einem anderen Server (wie Anzeigen) gehostet werden, werden diese nicht eingeschlossen. --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

65
genau dieselbe Zeile (wget --no-parent --timestamping --convert-links --page-requisites --no-verzeichnisse --no-host-verzeichnisse -erobots = off domain.tld) ​​speichert tatsächlich Hintergrundbilder, auf die verwiesen wird CSS nach dem Update auf 1.12. Das Handbuch sagt: "Mit http-URLs ruft Wget die HTML- oder CSS-Datei von der angegebenen URL ab und analysiert sie, indem sie die Dateien abruft, auf die sich das Dokument bezieht, und zwar durch Markup wie href oder src oder css-uri-Werte, die mit der Funktion 'url ()' angegeben wurden Notation." Das zweite Problem muss noch gelöst werden user14124 vor 14 Jahren 1

4 Antworten auf die Frage

99
vvo

Auf der Wget-Manpage :

Um eine einzelne Seite und alle erforderlichen Anforderungen herunterzuladen (auch wenn sie auf separaten Websites vorhanden sind) und um sicherzustellen, dass die Partie lokal korrekt angezeigt wird, verwendet dieser Autor gerne einige Optionen neben '-p':

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

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

Es scheint, dass es nur js und css in absolute URLs umschreibt Greg Dean vor 11 Jahren 0
Überhaupt war es robots.txt nicht erlaubt, die Antwort mit dem Workaround zu aktualisieren Greg Dean vor 11 Jahren 1
Erweitert: `wget --adjust-extension --span-hosts --convert-links --backup-konvertiert --page-requisites [url]` sam vor 10 Jahren 17
Oder noch besser: wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names = windows` [url] Petah vor 9 Jahren 2
@ ! = Auf [NC]` `RewriteRule ^ / (. *) Https://127.0.0.1:5601/$1 [R = 301, L]` hinzugefügt und es funktioniert nicht. Es leitet mich immer noch zur Apache-Standardseite "Es funktioniert" (((und wie kann ich die Datei ausprobieren?). Tim vor 8 Jahren 0
7
Ernie Dunbar

Der wgetBefehl bietet die Option --mirror, die dasselbe tut wie:

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

Sie können auch -xeine vollständige Verzeichnishierarchie für die Site erstellen, einschließlich des Hostnamens.

Sie konnten dies möglicherweise nicht finden, wenn Sie nicht die neueste Version von verwenden wget.

Dadurch wird wahrscheinlich die gesamte Website mit ihren Unter-URLs gecrawlt 4253wyerg4e vor 5 Jahren 0
2
quack quixote

Es klingt wie wgetund Firefox analysiert das CSS nicht für Links, um diese Dateien in den Download aufzunehmen. Sie können diese Einschränkungen umgehen, indem Sie die möglichen Einschränkungen ermitteln und die Link-Extraktion aus einem beliebigen CSS oder Javascript in den heruntergeladenen Dateien erstellen, um eine Liste der fehlenden Dateien zu erstellen. Bei einem zweiten Durchlauf wgetdieser Linkliste konnten die fehlenden Elemente erfasst werden (verwenden Sie das -iKennzeichen, um URLs für eine Dateiliste anzugeben).

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

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

Wie ich in dem Kommentar für meinen ersten Beitrag gesagt habe, scheint es in v1.12 behoben worden zu sein. Ich weiß immer noch nicht, wie Bilder auf anderen Servern eingefügt werden sollen. user14124 vor 14 Jahren 0
ja, das CSS zu parsen ist neu in wget v1.12, es steht ganz oben im changelog: http://freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04 quack quixote vor 14 Jahren 0
Fügen Sie die Option -H zur Liste hinzu. Es steht für --span-hosts und ermöglicht das Herunterladen von Inhalten von externen Hosts. Michael vor 14 Jahren 0
2
webjay

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

Es verwendet Wget und überträgt die Site in ein Repository in 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