Speichern Sie eine einzelne Webseite (mit Hintergrundbildern) mit Wget

73

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 meines Erachtens 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

user14124
quelle
1
In genau derselben Zeile (wget --no-parent --timestamping --convert-links --seitenanforderungen --no-directorys --no-host-directorys -erobots = off domain.tld) ​​werden tatsächlich Hintergrundbilder gespeichert, auf die verwiesen wird CSS nach dem Update auf 1.12. Im Handbuch heißt es: "Mit http urls ruft Wget den HTML- oder CSS-Code von der angegebenen URL ab und analysiert ihn. Dabei werden die Dateien abgerufen, auf die sich das Dokument bezieht, und zwar durch Markups wie href oder src oder CSS-URL-Werte, die mit der Funktion 'url ()' angegeben wurden Notation." Das zweite Problem muss noch gelöst werden
user14124

Antworten:

106

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 robots.txt, dass Sie nicht zulassen, fügen Sie hinzu-e robots=off

vvo
quelle
Es scheint, dass es nur js und css zu absoluten URLs umschreibt
Greg Dean
1
egal, es war robots.txt, was mir nicht erlaubte, die Antwort mit dem Workaround zu aktualisieren
Greg Dean
19
Erweitert:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
sam
4
Oder noch besser wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[url]
Petah
@ {etah: Ich habe Ihren Befehl mit Ihren Argumenten ausprobiert. Er lädt andere Webseiten als die angegebenen herunter.
Tim
7

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

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

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

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

Ernie Dunbar
quelle
1
Dies wird wahrscheinlich die gesamte Website mit ihren Unter-URLs crawlen
4253wyerg4e
2

Es hört sich so an, wgetals würde Firefox das CSS nicht nach Links durchsuchen, um diese Dateien in den Download einzubeziehen. 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 ein zweiter Durchlauf wgetdieser Liste von Links alles erfassen, was übersehen wurde (verwenden Sie das -iFlag, um eine Dateilisten-URL anzugeben).

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

Beachten Sie, dass wgetnur bestimmte HTML- Markups ( href/ src) und CSS-Uris ( url()) analysiert werden , 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 zu.

Quacksalber
quelle
Wie ich bereits im Kommentar zu meinem ersten Post erwähnt habe, scheint es, dass er in v1.12 behoben wurde. Ich weiß immer noch nicht, wie ich Bilder einbinden soll, die sich auf anderen Servern befinden.
user14124
yep, das Parsen des CSS ist neu in wget v1.12 und steht ganz oben im Changelog: freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
quack quixote 14.10.09
Fügen Sie der Liste die Option -H hinzu. Es steht für --span-hosts und ermöglicht das Herunterladen von Inhalten von externen Hosts.
Michael
2

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

Webjay
quelle