Hintergrund

Hintergrund

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 httrackLö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 wgetWayback-Spiegelung empfiehlt. Natürlich ist diese Empfehlung grundsätzlich nicht stichhaltig.

In Ermangelung einer komplexen externen URL-Umschreibung (z. B. Privoxy),wgetkann 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.comIhr 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-directoriesein 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 ScrapBookvonFilter 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 ScrapBookdas 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 wgetals auch nutzt Privoxy. Währendwget Istrelativ einfach zu konfigurieren, Privoxyist alles andere als vernünftig. Oder einfach.

Aufgrund der unwägbaren technischen Hürde der ordnungsgemäßen Installation, Konfiguration und Verwendung Privoxymü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+ Privoxyeinen 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 wgetSpiegelungsfunktionalität von implementiert. httrackunterstü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äfix http://(z. B. 'kearescue.com').

Auf geht's.Installieren Sie httrack, öffnen Sie ein Terminalfenster cdin 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 httrackalle 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 --continueOption 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 -npvon 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, -npdurchsucht wget die Seite nach oben (...)http://cst-www.nrl.navy.milund ruft schließlich die gesamte navi.milSite 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/404solange 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 -mes 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 firefoxErweiterungscrapbook

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

  1. Seite im Browser laden [zu spiegelnde Webseite]
  2. Klicken Sie mit der rechten Maustaste auf die Seite -> Seite speichern unter ...
  3. Wählen Sie die Ebene ausAusführlich Speichern und drücke Speichern Bildbeschreibung hier eingeben
  4. wählen ausRestrict to DrirectoryDomainFilter
    Bildbeschreibung hier eingeben

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/.

verwandte Informationen