Ich versuche, mit wget einen lokalen Spiegel einer Website zu erstellen. Ich stelle jedoch fest, dass ich nicht alle verknüpften Seiten erhalte.
Hier geht’s zur Webseite
http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
Ich möchte nicht alle Seiten, die mit beginnen web.archive.org
, aber ich möchte alle Seiten, die mit beginnen http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
.
Wenn ich verwende wget -r
, finde ich in meiner Dateistruktur
web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,
aber ich habe nicht alle Dateien, die Teil dieser Datenbank sind, zB
web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.
Vielleicht wäre httrack besser, aber derzeit beansprucht das zu viel.
Wie kann man also eine lokale Kopie einer archivierten Website aus demInternetarchiv Wayback Machine?
Antwort1
Obwohl sie hilfreich sind, können frühere Antworten die zugrunde liegende Frage nicht präzise, zuverlässig und wiederholbar beantworten. In diesem Beitrag erläutern wir kurz die Schwierigkeiten bei jeder Antwort und bieten dann eine einfache httrack
Lösung an.
Hintergrund
Bevor wir jedoch dazu kommen, sollten Sie sich folgendes durchlesen:mpy's gut geschriebene Antwort. In seinem leider vernachlässigten Beitrag,mpydokumentiert gewissenhaft das obskure (und ehrlich gesagt verwirrende) Archivierungsschema der Wayback Machine.
Es ist, wenig überraschend, nicht schön.Anstatt Websites sinnvoll in einem einzigen Verzeichnis zu archivieren, verteilt die Wayback Machine eine einzelne Website vorübergehend auf zwei oder mehr numerisch identifizierte Schwesterverzeichnisse. Zu sagen, dass dies das Spiegeln erschwert, wäre eine erhebliche Untertreibung.
Um die Unzulänglichkeit früherer Lösungen zu verstehen, ist es wichtig, die schrecklichen Fallstricke zu verstehen, die dieses Schema birgt. Fangen wir doch einfach damit an, oder?
Vorherige Lösung 1: wget
Die zugehörige StackOverflow-Frage„Alte Website von Wayback Machine wiederherstellen“ist in dieser Hinsicht wahrscheinlich der schlimmste Übeltäter, da er wget
Wayback-Spiegelung empfiehlt. Natürlich ist diese Empfehlung grundsätzlich nicht stichhaltig.
In Ermangelung einer komplexen externen URL-Umschreibung (z. B. Privoxy
),wget
kann nicht verwendet werden, um Wayback-archivierte Sites zuverlässig zu spiegeln.AlsmpyEinzelheiten unter "Problem 2 + Lösung". Das von Ihnen gewählte Spiegelungstool muss es Ihnen ermöglichen, nicht-transitiv herunterzuladen.nurURLs, die zur Zielseite gehören. Standardmäßig laden die meisten Spiegelungstools transitivalleURLs, die sowohl zur Zielsite als auch zu den von dieser Site aus verlinkten Sites gehören – im schlimmsten Fall also „das gesamte Internet“.
Ein konkretes Beispiel ist angebracht. Beim Spiegeln der Beispieldomäne wird kearescue.com
Ihr Spiegelungstoolmuss:
- Schließt alle URLs ein, die mit übereinstimmen
https://web.archive.org/web/*/http://kearescue.com
. Dabei handelt es sich um Assets, die von der Zielsite bereitgestellt werden (z. B.https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js
). - Schließen Sie alle anderen URLs aus. Dabei handelt es sich um Assets anderer Sites, auf die von der Zielsite aus lediglich verwiesen wird (z. B.
https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js
).
Wenn Sie solche URLs nicht ausschließen, wird normalerweise das gesamte oder der größte Teil des Internets einbezogen, das zum Zeitpunkt der Archivierung der Site archiviert war. Dies gilt insbesondere für Sites mit eingebetteten extern gehosteten Assets (z. B. YouTube-Videos).
Das wäre schlecht.Währendwget
tutbieten eine Befehlszeilenoption, die --exclude-directories
ein oder mehrere Muster akzeptiert, die mit auszuschließenden URLs übereinstimmen.nichtallgemeine reguläre Ausdrücke; es handelt sich um vereinfachte Globs, deren *
Syntax mit null oder mehr Zeichen übereinstimmtausschließlich/
Da die auszuschließenden URLs beliebig viele /
Zeichen enthalten,wget
kann nichtverwendet werden, um diese URLs auszuschließen und somitkann nichtkann zum Spiegeln von Wayback-archivierten Sites verwendet werden.Zeitraum.Ende der unglücklichen Geschichte.
Dieses Problem wurdeöffentliche Aufnahmeseit mindestens 2009. Das Problem ist noch nicht gelöst.Nächste!
Vorherige Lösung 2: Scrapbook
Prinzempfiehlt ScrapBook
, ein Firefox-Plugin.Ein Firefox-Plugin.
Das war wahrscheinlich alles, was Sie wissen mussten. Während die Funktionalität ScrapBook
vonFilter by String...
tutdas oben genannte „Problem 2 + Lösung“ ansprechen,nichtGehen Sie auf das nachfolgende „Problem 3 + Lösung“ ein, nämlich das Problem der irrelevanten Duplikate.
Es ist fraglich, ob ScrapBook
das erstgenannte Problem überhaupt ausreichend angegangen wird.mpygibt zu:
Obwohl es Scrapbook bisher nicht gelungen ist, die Site vollständig zu erobern …
Unzuverlässige und zu vereinfachte Lösungen sind keine Lösungen. Weiter!
Vorherige Lösung 3: wget + Privoxy
mpybietet dann eine robuste Lösung, die sowohl wget
als auch nutzt Privoxy
. Währendwget
Istrelativ einfach zu konfigurieren, Privoxy
ist alles andere als vernünftig. Oder einfach.
Aufgrund der unwägbaren technischen Hürde der ordnungsgemäßen Installation, Konfiguration und Verwendung Privoxy
müssen wir noch bestätigenmpy's Lösung. Essollenarbeiten auf skalierbare, robuste Weise. Angesichts der Einstiegsbarrieren ist diese Lösung wahrscheinlich eher für die Automatisierung im großen Maßstab geeignet als für den durchschnittlichen Webmaster, der versucht, kleine bis mittelgroße Websites wiederherzustellen.
Ist wget
+ Privoxy
einen Blick wert?Absolut.Für die meisten Superuser sind jedoch einfachere und leichter anwendbare Lösungen möglicherweise besser geeignet.
Neue Lösung: httrack
Geben Sie ein httrack
, ein Befehlszeilenprogramm, das eine Obermenge der wget
Spiegelungsfunktionalität von implementiert. httrack
unterstützt sowohl musterbasierte URL-AusschlüsseUndeinfache Umstrukturierung der Website. Ersteres löstmpy's „Problem 2 + Lösung“; letzteres „Problem 3 + Lösung“.
Ersetzen Sie im folgenden abstrakten Beispiel:
${wayback_url}
durch die URL des obersten Verzeichnisses, in dem Ihre gesamte Zielsite archiviert ist (z. B.'https://web.archive.org/web/20140517175612/http://kearescue.com'
).${domain_name}
durch den gleichen Domänennamen, der in vorkommt,${wayback_url}
ohne das Präfixhttp://
(z. B.'kearescue.com'
).
Auf geht's.Installieren Sie httrack
, öffnen Sie ein Terminalfenster cd
in dem lokalen Verzeichnis, in das Ihre Site heruntergeladen werden soll, und führen Sie den folgenden Befehl aus:
httrack\
${wayback_url}\
'-*'\
'+*/${domain_name}/*'\
-N1005\
--advanced-progressinfo\
--can-go-up-and-down\
--display\
--keep-alive\
--mirror\
--robots=0\
--user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
--verbose
Nach Abschluss sollte das aktuelle Verzeichnis ein Unterverzeichnis für jeden Dateityp enthalten, der von dieser URL gespiegelt wird. Dies umfasst normalerweise mindestens:
css
, das alle gespiegelten CSS-Stylesheets enthält.html
, die alle gespiegelten HTML-Seiten enthält.js
, das sämtliches gespiegeltes JavaScript enthält.ico
, enthält ein gespiegeltes Favicon.
Da httrack
alle heruntergeladenen Inhalte intern neu geschrieben werden, um diese Struktur widerzuspiegeln, sollte Ihre Site nun unverändert durchsuchbar sein. Wenn Sie den obigen Befehl vorzeitig abgebrochen haben und den Download fortsetzen möchten, hängen Sie die --continue
Option an denselben Befehl an und versuchen Sie es erneut.
Das ist es.Keine externen Verrenkungen, fehleranfällige URL-Umschreibungen oder regelbasierte Proxyserver erforderlich.
Viel Spaß, liebe Superuser.
Antwort2
Leider konnte keine der Antworten das Problem lösen, einen vollständigen Spiegel einer archivierten Website zu erstellen (ohne jede Datei Dutzende Male zu duplizieren). Also habe ich einen anderen Ansatz zusammengebastelt.Gehacktist das wichtige Wort, da meine Lösung weder eine allgemeine Lösung noch eine sehr einfache (sprich: kopieren und einfügen) ist. Ich habe diePrivoxy Proxy Serverdie Dateien neu schreibenspontanbeim Spiegeln mit wget.
Aber zunächst, was ist so schwierig an der Spiegelung von derWayback-Maschine?
Problem 1 + Lösung
Die Wayback-Symbolleiste ist praktisch für die interaktive Nutzung, kann aber wget stören. Entfernen Sie sie also mit einer Privoxy-Filterregel
FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s
Problem 2 + Lösung
Ich wollte die gesamte Site erfassen, also brauchte ich eine nicht zu geringe Rekursionstiefe. Aber ich möchte nicht, dass wget den gesamten Server durchsucht. Normalerweise verwendet man denkein ElternteilOption -np
von wget für diesen Zweck. Aber das wird hier nicht funktionieren, weil Sie wollen
http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/struk/hcp.html
aber auch
http://web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
(beachten Sie den geänderten Zeitstempel in den Pfaden). Wenn Sie dies weglassen, -np
durchsucht wget die Seite nach oben (...)http://cst-www.nrl.navy.mil
und ruft schließlich die gesamte navi.mil
Site ab. Das möchte ich auf keinen Fall! Daher versucht dieser Filter, das Verhalten mit der Wayback-Maschine zu emulieren -np
:
FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU
Ich werde es als Übung aufgeben, mich mit der Syntax zu befassen. Was dieser Filter macht, ist Folgendes: Er ersetzt alle Wayback-URLs wie http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/
durch , http://some.local.server/404
solange sienichtenthalten http://cst-www.nrl.navy.mil/lattice/
.
Sie müssen anpassen http://some.local.server/404
. Dies dient dazu, einen 404-Fehler an wget zu senden. Wahrscheinlich kann Privoxy das eleganter machen. Der einfachste Weg für mich war jedoch, den Link einfach auf eine nicht vorhandene Seite auf einem lokalen HTTP-Server umzuschreiben, also bin ich dabei geblieben.
Und Sie müssen auch anpassenbeide Vorkommenum http://cst-www.nrl.navy.mil/lattice/
die Site anzuzeigen, die Sie spiegeln möchten.
Problem 3 + Lösung
Und schließlich könnte eine archivierte Version einer Seite auf eine Seite in einem anderen Snapshot verweisen. Und dieser wiederum auf einen weiteren. Und so weiter... und Sie werden am Ende viele Snapshots derselben Seite haben - und wget wird nie fertig, bis es sie abgerufen hat.alleSchnappschüsse. Das will ich auch nicht! Hier hilft es sehr, dass die Wayback-Maschine sehr intelligent ist. Sie können eine Datei anfordern
http://web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
auch wenn es nicht im Lieferumfang enthalten ist20110801041529
Snapshot enthalten ist. Esautomatischleiten Sie Sie zur richtigen Seite weiter:
http://web.archive.org/web/20110731225728/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
Also ein weiterer Privoxy-Filter, um alle Snapshots auf den aktuellsten zu überschreiben
FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g
Tatsächlich wird jede in eingeschlossene 14-stellige Zahl /.../
ersetzt durch20120713212803
(passen Sie das an den aktuellsten Snapshot Ihrer gewünschten Site an). Dies kann ein Problem sein, wenn es in der Site-Struktur solche Zahlen gibt, die nicht von der Wayback-Maschine stammen. Nicht perfekt, aber gut für dieStrukturtypenWebsite.
Das Schöne daran ist, dass wget den neuen Speicherort, zu dem es umgeleitet wird, ignoriert und die Datei – im obigen Beispiel – als speichert web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html
.
Verwenden von wget zum Spiegeln archivierter Sites
Mit diesen Privoxy-Filtern (definiert in user.filter
), die user.action
über aktiviert sind,
{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org
Sie können wget wie gewohnt verwenden. Vergessen Sie nicht, wget anzuweisen, den Proxy zu verwenden:
export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html
Ich habe diese Optionen verwendet, aber -m
es sollte auch funktionieren. Sie erhalten die Ordner
20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_
Da die Wayback Machine Bilder ( im_
), Stylesheets ( cs_
) usw. trennt, habe ich alles zusammengeführt und mit etwas Sed-Magie die hässlichen relativen Links () entsprechend ersetzt ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice
. Aber das ist nicht wirklich notwendig.
Antwort3
wget
--page-requisites
Diese Option veranlasst Wget, alle Dateien herunterzuladen, die für die korrekte Anzeige einer bestimmten HTML-Seite erforderlich sind. Dazu gehören beispielsweise eingebettete Bilder, Sounds und referenzierte Stylesheets.
Normalerweise werden beim Herunterladen einer einzelnen HTML-Seite alle erforderlichen Dokumente, die für die korrekte Anzeige erforderlich sind, nicht heruntergeladen. Die Verwendung von -r zusammen mit -l kann hilfreich sein, aber da Wget normalerweise nicht zwischen externen und eingebetteten Dokumenten unterscheidet, bleiben im Allgemeinen „Blattdokumente“ übrig, denen die erforderlichen Dokumente fehlen.
Nehmen wir beispielsweise an, dass Dokument 1.html ein ""-Tag enthält, das auf 1.gif verweist, und ein ""-Tag, das auf das externe Dokument 2.html zeigt. Nehmen wir an, dass 2.html ähnlich ist, aber dass das Bild 2.gif ist und auf 3.html verweist. Nehmen wir an, dass dies bis zu einer beliebig hohen Zahl so weitergeht.
-m
--mirror
Aktivieren Sie Optionen, die für die Spiegelung geeignet sind. Diese Option aktiviert Rekursion und Zeitstempel, legt eine unendliche Rekursionstiefe fest und behält FTP-Verzeichnislisten bei. Dies entspricht derzeit -r -N -l inf --no-remove-listing.
Beachten Sie, dass sich Wget so verhält, als ob -r angegeben worden wäre, aber nur diese eine Seite und ihre Voraussetzungen werden heruntergeladen. Links von dieser Seite zu externen Dokumenten werden nicht verfolgt. Um tatsächlich eine einzelne Seite und alle ihre Voraussetzungen herunterzuladen (auch wenn sie auf unterschiedlichen Websites vorhanden sind) und sicherzustellen, dass alles lokal richtig angezeigt wird, verwendet dieser Autor gerne zusätzlich zu -p einige Optionen:
wget -E -H -k -K -p http://<site>/<document>
SO wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice
wird für Sie am besten geeignet sein. Aber ich empfehle ein anderes Tool, eine firefox
Erweiterungscrapbook
Sammelalbum
ScrapBook ist eine Firefox-Erweiterung, mit der Sie Webseiten speichern und Sammlungen einfach verwalten können. Wichtige Funktionen sind Leichtigkeit, Geschwindigkeit, Genauigkeit und Mehrsprachenunterstützung. Wichtige Funktionen sind:
* Webseite speichern
* Ausschnitt einer Webseite speichern
* Website speichern
* Sammlung wie Lesezeichen organisieren
* Volltextsuche und schnelle Filtersuche in der Sammlung
* Bearbeiten der gesammelten Webseite
* Text-/HTML-Bearbeitungsfunktion ähnlich den Notizen von Opera
So spiegeln Sie eine Site
InstallierenSammelalbum und starten Sie Firefox neu
- Seite im Browser laden [zu spiegelnde Webseite]
- Klicken Sie mit der rechten Maustaste auf die Seite -> Seite speichern unter ...
- Wählen Sie die Ebene ausAusführlich Speichern und drücke Speichern
- wählen aus
Restrict to Drirectory
Domain
Filter
Warten Sie, bis die Spiegelung abgeschlossen ist. Nach der Spiegelung können Sie über das Menü offline auf die Website zugreifen ScrapBook
.
Antwort4
Das Format der URLs für das Internetarchiv enthält das Datum und die Uhrzeit der Archivierung der Site. Um Platz zu sparen, werden unveränderte Assets mit einer früheren Version einer Site verknüpft.
Zum Beispiel in dieser URLhttp://web.archive.org/web/20000229123340/http://www.yahoo.com/Das Datum, an dem die Site gecrawlt wurde, war der 29. Februar 2000 um 12:33 und 40 Sekunden.
Um alles zu erhalten, http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/
müssen Sie damit beginnen, aber auch alle verknüpften Assets von abrufen http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/
.