Probleme beim Verwenden von wget oder httrack zum Spiegeln der archivierten Website

8132
user695322

Ich versuche, mit wget einen lokalen Spiegel einer Website zu erstellen. Ich stelle jedoch fest, dass ich nicht alle verlinkenden Seiten bekomme.

Hier ist die Website

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

Bei meiner Verwendung wget -rfinde ich in meiner Dateistruktur

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html, 

Ich habe jedoch nicht alle Dateien, die Teil dieser Datenbank sind, z

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html. 

Vielleicht wäre httrack besser, aber im Moment ist es zu viel.

Auf welche Weise ist es möglich, eine lokale Kopie einer archivierten Website von der Internet Archive Wayback Machine zu beziehen?

11
Mann! Ich habe versucht, genau dieselbe Seite zu spiegeln (und wirklich wütend darüber war, dass ich es nicht getan habe, als die ursprüngliche Website noch online war, was viel einfacher gewesen wäre). Ich denke, ein Problem ist, dass nicht alle Dateien unter dem `20110722080716`-Snapshot zugänglich sind. Daher hilft die` -np`-Option von wget nicht. mpy vor 10 Jahren 0
Haben Sie manuell geprüft, ob die fehlenden Seiten tatsächlich archiviert werden? Archive.org archiviert nicht immer jede einzelne Seite. nitro2k01 vor 10 Jahren 0

5 Antworten auf die Frage

16
Cecil Curry

Zwar hilfreich, frühere Antworten können die zugrunde liegende Frage nicht präzise, ​​zuverlässig und wiederholt lösen. In diesem Beitrag erläutern wir kurz die Schwierigkeiten und bieten dann eine bescheidene httrackLösung.

Hintergrund

Bevor wir dazu kommen, sollten Sie sich die gut geschriebene Antwort von mpy durchlesen . In seinem leider vernachlässigten Posten dokumentiert mpy das obskure (und ehrlich verschleierte) Archivsystem der Wayback Machine.

Kein Wunder, dass es nicht hübsch ist. Anstatt Sites nur in einem einzigen Verzeichnis zu archivieren, verteilt The Wayback Machine ephemal eine einzelne Site auf zwei oder mehr numerisch identifizierte gleichgeordnete Verzeichnisse. Zu sagen, dass dies die Spiegelung kompliziert, wäre eine erhebliche Untertreibung.

Das Verständnis der schrecklichen Fallstricke, die dieses Schema darstellt, ist für das Verständnis der Unzulänglichkeit früherer Lösungen von zentraler Bedeutung. Lasst uns damit weitermachen, oder?

Vorherige Lösung 1: wget

Die verwandte StackOverflow-Frage "Alte Website von Waybackmachine wiederherstellen" ist wahrscheinlich der schlimmste Täter in dieser Hinsicht und empfiehlt die wgetSpiegelung von Wayback. Diese Empfehlung ist natürlich grundsätzlich unhaltbar.

Wenn keine komplexen externen URL-Umschreibungen (z. B. Privoxy) vorhanden sind, wgetkönnen keine mit Wayback archivierten Sites zuverlässig gespiegelt werden. Als mpy- Details unter "Problem 2 + Lösung" müssen Sie bei jedem von Ihnen ausgewählten Spiegelungstool die Möglichkeit haben, nur URLs der Zielwebsite nicht transitiv herunterzuladen . Standardmäßig laden die meisten Spiegelungs-Tools alle URLs herunter, die sowohl zur Ziel-Website als auch zu Websites gehören, auf die von dieser Website aus verlinkt wird - was im schlimmsten Fall "das gesamte Internet" bedeutet.

Ein konkretes Beispiel ist in Ordnung. Wenn das Beispiel Domain - Spiegelung kearescue.com, Ihre Spiegelung Werkzeug muss :

  • Schließen Sie alle übereinstimmenden URLs ein https://web.archive.org/web/*/http://kearescue.com. Dies sind Assets, die vom Zielstandort bereitgestellt werden (z https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js. B. ).
  • Alle anderen URLs ausschließen Hierbei handelt es sich um Vermögenswerte, die von anderen Websites bereitgestellt werden und lediglich mit der Ziel-Site verknüpft sind (z https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js. B. ).

Wenn solche URLs nicht ausgeschlossen werden, werden in der Regel alle oder die meisten der zum Zeitpunkt der Archivierung der Website archivierten Internets verwendet, insbesondere für Websites, die extern gehostete Assets (z. B. YouTube-Videos) einbetten.

Das wäre schlecht. Bietet wget zwar eine Befehlszeilenoption, --exclude-directoriesdie ein oder mehrere auszuschließende Muster akzeptiert, jedoch keine regulären Ausdrücke für allgemeine Zwecke. sie sind simpel Klackse deren *Syntax entspricht null oder mehr Zeichen ohne/ . Da die auszuschließenden URLs beliebig viele /Zeichen enthalten, wget können sie nicht zum Ausschluss dieser URLs und daher nicht zum Spiegeln von mit Wayback archivierten Websites verwendet werden. Zeitraum. Ende der unglücklichen Geschichte.

Dieses Problem ist seit mindestens 2009 öffentlich bekannt . Es muss noch geklärt werden. Nächster!

Vorherige Lösung 2: Sammelalbum

Prinz empfiehlt ScrapBookein Firefox-Plugin. Ein Firefox-Plugin.

Das war wahrscheinlich alles, was Sie wissen mussten. Während ScrapBook‚s - Filter by String...Funktionalität macht das oben genannte Adresse‚Problems 2 + Lösung,‘es ist nicht adressiert das nachfolgende‚Problem 3 + Solution‘- nämlich das Problem der Fremd Duplikate.

Es ist fraglich, ob ScrapBookdas frühere Problem auch adäquat angegangen wird. Wie mpy zugibt:

Obwohl Scrapbook es bisher nicht geschafft hat, die Seite komplett zu packen ...

Unzuverlässige und allzu einfache Lösungen sind keine Lösungen. Nächster!

Vorherige Lösung 3: wget + Privoxy

mpy bietet dann eine robuste Lösung, die sowohl wgetund als auch nutzt Privoxy. Ist wget zwar relativ einfach zu konfigurieren, Privoxyist aber alles andere als sinnvoll. Oder einfach.

Aufgrund der unüberwindlichen technischen Hürde bei der ordnungsgemäßen Installation, Konfiguration und Verwendung Privoxymüssen wir die Lösung von mpy noch nicht bestätigen . Es sollte skalierbar und robust funktionieren. Angesichts der Markteintrittsbarrieren ist diese Lösung wahrscheinlich für die Automatisierung im großen Maßstab besser geeignet als der durchschnittliche Webmaster, der versucht, kleine bis mittlere Websites wiederherzustellen.

Ist wget+ Privoxyeinen Blick wert? Absolut. Die meisten Superbenutzer könnten jedoch mit einfacheren, leichter anwendbaren Lösungen besser bedient werden.

Neue Lösung: httrack

Geben Sie httrackein Befehlszeilenprogramm ein, das eine Obermenge der wgetSpiegelungsfunktionen implementiert . httrackUnterstützt sowohl den musterbasierten URL-Ausschluss als auch die vereinfachte Umstrukturierung von Websites. Ersteres löst die "Problem 2 + Solution" von mpy ; Letzteres "Problem 3 + Lösung".

Ersetzen Sie im folgenden abstrakten Beispiel:

  • $durch die URL des obersten Verzeichnisses, in dem die gesamte Zielseite (z 'https://web.archive.org/web/20140517175612/http://kearescue.com'. B. ) archiviert wird .
  • $durch den gleichen Domainnamen, der beim $Ausschließen des Präfixes vorhanden ist http://(z 'kearescue.com'. B. ).

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\ $\ '-*'\ '+*/$/*'\ -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 Fertigstellung sollte das aktuelle Verzeichnis ein Unterverzeichnis für jeden Dateityp enthalten, der von dieser URL gespiegelt wird. Dies umfasst in der Regel mindestens:

  • css, die alle gespiegelten CSS-Stylesheets enthält.
  • html, die alle gespiegelten HTML-Seiten enthält.
  • js, das alles gespiegelte JavaScript enthält.
  • ico, enthält ein gespiegeltes Favicon.

Da httrackalle heruntergeladenen Inhalte intern umgeschrieben werden, um diese Struktur wiederzugeben, sollte Ihre Website jetzt ohne Änderungen durchblendbar sein. Wenn Sie den obigen Befehl vorzeitig angehalten 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 Verfälschungen, fehleranfälliges URL-Umschreiben oder regelbasierte Proxy-Server erforderlich.

Viel Spaß, andere Superuser.

Ich bin froh zu hören, dass mindestens eine Person meine Antwort sorgfältig gelesen hat. Und vielen Dank für Ihre weitere Analyse und die httrack-Lösung. +1 mpy vor 10 Jahren 0
Die httrack-Lösung war perfekt, vielen Dank! ChrisChinchilla vor 9 Jahren 1
Ich bin froh, von geringfügiger Hilfe zu sein, Jungs. In Anbetracht dessen, wie verwirrend schrecklich diese Tapisserie aus Trauer und Betrug zu entwirren war, musste ich nur meine Erkenntnisse mitteilen. Cecil Curry vor 9 Jahren 0
Um das Übertragungslimit für die Rate zu entfernen, fügen Sie die folgenden Parameter hinzu: --disable-security-limits --max-rate = 0 Oswaldo vor 7 Jahren 0
4
Prinz

wget

--page-requisites Mit
dieser Option lädt Wget alle Dateien herunter, die zum Anzeigen einer bestimmten HTML-Seite erforderlich sind. Dazu gehören beispielsweise eingebettete Bilder, Sounds und referenzierte Stylesheets.

Normalerweise werden beim Herunterladen einer einzelnen HTML-Seite erforderliche Dokumente, die für die korrekte Anzeige der HTML-Seite 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, verbleiben im Allgemeinen "Blattdokumente", die ihre Anforderungen nicht erfüllen.

Angenommen, Dokument 1.html enthält ein "" Tag, das auf 1.gif verweist, und ein "" Tag, das auf externes Dokument 2.html verweist. Sagen Sie, dass 2.html ähnlich ist, aber dass das Image 2.gif ist und es mit 3.html verknüpft ist. Angenommen, dies geht bis zu einer beliebig hohen Anzahl weiter.

-m
--mirror

Aktivieren Sie zum Spiegeln geeignete Optionen. Mit dieser Option werden Rekursion und Zeitstempel aktiviert, die Tiefe der unbegrenzten Rekursion festgelegt und die FTP-Verzeichnislisten beibehalten. Es ist derzeit äquivalent zu -r -N -l inf --no-remove-Listing.

Beachten Sie, dass sich Wget so verhält, als wäre -r angegeben worden, aber nur diese einzelne Seite und ihre Anforderungen werden heruntergeladen. Links von dieser Seite zu externen Dokumenten werden nicht verfolgt. Um eine einzelne Seite und alle erforderlichen Anforderungen herunterzuladen (auch wenn diese auf separaten Websites vorhanden sind) und um sicherzustellen, dass die Partie lokal korrekt angezeigt wird, verwendet dieser Autor neben -p gerne 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 dein bester Anzug für dich sein. Aber ich empfehle ein anderes Werkzeug, eine firefoxErweiterungscrapbook

Sammelalbum

ScrapBook ist eine Firefox-Erweiterung, mit der Sie Webseiten speichern und Sammlungen einfach verwalten können. Hauptmerkmale sind Leichtigkeit, Geschwindigkeit, Genauigkeit und Unterstützung für mehrere Sprachen. Die wichtigsten Funktionen sind:
* Webseite speichern
* Ausschnitt der Webseite
speichern * Website speichern
* Die Sammlung auf die gleiche Weise wie Lesezeichen verwalten
* Volltextsuche und schnelle Filtersuche der Sammlung
* Bearbeitung der gesammelten Webseite
* Text / HTML Bearbeiten Sie die Funktion ähnlich den Notizen von Opera

So spiegeln Sie eine Site
Installieren Sie Scrapbook und starten Sie Firefox neu

  1. Seite in Browser laden [zu spiegelnde Webseite]
  2. Rechtsklick auf die Seite -> Seite speichern unter ...
  3. Wählen Sie unter Tief Speichern die Option aus und drücken Sie Speichern
  4. Wählen Sie Restrict to Drirectory/ Domainaus Filter

Warten Sie, bis die Spiegelung abgeschlossen ist. Nach dem Spiegeln können Sie offline über das ScrapBookMenü auf die Website zugreifen .

Obwohl Scrapbook die Site bisher nicht vollständig erfasst hat, war sie einer möglichen Lösung näher als die anderen Vorschläge. Insbesondere die Option _Filter by String ..._ war hilfreich, als nach Host / Domäne zu filtern. Daher gebe ich Ihnen die Prämie `:)` mpy vor 10 Jahren 0
4
mpy

Leider konnte keine der Antworten das Problem lösen, einen vollständigen Spiegel aus einer archivierten Website zu erstellen (ohne jede Datei dutzende Male zu duplizieren). Also habe ich einen anderen Ansatz gehackt. Hacked ist das wichtige Wort, da meine Lösung weder eine allgemeine Lösung noch eine sehr einfache (read: copy & paste) Lösung ist. Ich benutzte den Privoxy Proxy Server die Dateien neu zu schreiben on-the-fly, während mit wget Spiegelung.

Aber erstens, was ist so schwierig am Spiegeln der Wayback-Maschine ?

Problem 1 + Lösung

Die Wayback-Symbolleiste ist praktisch für die interaktive Verwendung, kann jedoch wget stören. Befreien Sie sich 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 kleine Rekursionstiefe. Ich möchte jedoch nicht, dass wget den gesamten Server durchsucht. Normalerweise verwenden Sie zu diesem Zweck die Option no-parent-np von wget. Aber das wird hier nicht funktionieren, weil du es willst

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). Das Auslassen -npführt dazu, dass Sie mit dem Crawlen (...)http://cst-www.nrl.navy.mildie gesamte navi.milSite abrufen . Das will ich definitiv nicht! Dieser Filter versucht also, das -npVerhalten mit der Wayback-Maschine zu simulieren:

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 lasse es als Übung, mich mit der Syntax zu beschäftigen. Dieser Filter bewirkt Folgendes: Er ersetzt alle Wayback-URLs wie http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/mit, http://some.local.server/404sofern sie nicht enthalten sind http://cst-www.nrl.navy.mil/lattice/.

Du musst dich anpassen http://some.local.server/404. Dies ist, um einen Fehler 404 an wget zu senden. Wahrscheinlich kann Privoxy dies eleganter machen. Der einfachste Weg für mich war jedoch, den Link zu einer nicht existierenden Seite auf einem lokalen http-Server neu zu schreiben, also blieb ich bei diesem.

Und, müssen Sie auch einstellen beide Vorkommen von http://cst-www.nrl.navy.mil/lattice/der Website, die Sie spiegeln möchten zu reflektieren.

Problem 3 + Lösung

Und schließlich kann eine archivierte Version einer Seite mit einer anderen Momentaufnahme verlinkt sein. Und das noch einer. Und so weiter ... und Sie erhalten am Ende viele Snapshots auf derselben Seite - und wget wird es nicht schaffen, bis alle Snapshots abgerufen wurden . Ich will das auch wirklich nicht! Hier hilft es sehr, dass die Wayback-Maschine sehr schlau 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 in der 20110801041529Momentaufnahme enthalten ist. Es leitet Sie automatisch auf das richtige um:

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 neuesten zu schreiben

FILTER: rewritewaybackstamp rewrite Wayback snapshot date s|/([0-9])(.)/|/20120713212803$2/|g 

Tatsächlich wird jede 14-stellige Zahl, die in eingeschlossen ist, /.../durch ersetzt 20120713212803(passen Sie diese an den neuesten Schnappschuss der gewünschten Site an). Dies kann ein Problem sein, wenn solche Nummern in der Site-Struktur nicht von der Wayback-Maschine stammen. Nicht perfekt, aber gut für die Strukturtypen- Site.

Das Schöne daran ist, dass wget den neuen Speicherort ignoriert, an den es umgeleitet wird, und die Datei - in der obigen Ausführung - als speichert web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Verwenden von wget zum Spiegeln der archivierten Site

Also endlich mit diesen (in definierten user.filter) Privoxy-Filtern in user.actionvia aktiviert

{ +filter +filter +filter } web.archive.org 

Sie können wget wie gewohnt verwenden. Vergessen Sie nicht, wget mitzuteilen, dass es den Proxy verwenden soll:

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 genutzt, -msollte aber auch funktionieren. Sie werden mit den Ordnern enden

20120713212803 20120713212803cs_ 20120713212803im_ 20120713212803js_ 

Als die Wayback-Maschine images ( im_), style sheet ( cs_) usw. trennt, habe ich alles zusammengefügt und Sed-Magie verwendet, um die hässlichen relativen Links ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) entsprechend zu ersetzen . Das ist aber nicht unbedingt nötig.

Dies war eine unschätzbare Antwort. Ihre genaue Analyse der internen Site-Struktur von The Wayback Machine war der Schlüssel zu der auf [httrack] (http://superuser.com/a/770652/334611) basierenden Lösung, auf die ich schließlich gestoßen bin. ** Sie rocken, mpy. ** Cecil Curry vor 9 Jahren 1
0
Michael Yasumoto

Seien Sie vorsichtig mit dem untenstehenden Befehl, da er sehr viel kostet. Die 1 hinter dem 'l' fordert es auf, alle Seiten für Links auf der Site zu erfassen, die eine Ebene tief sind. Wenn Sie möchten, dass die Spinne tiefer greift, ändern Sie diese in eine 2, die jedoch möglicherweise nie endet, da sie in einer Schleife hängen bleiben kann.

wget -rHpkl 1 -e robots=off http://www.example.com/ 

Ich bin nicht sicher, welche Teile der Website Sie behalten möchten und welche Teile Sie nicht interessieren, aber Sie sollten wahrscheinlich die verschiedenen Teile der Website auflisten und / oder auf eine schwarze Liste setzen, um nur das zu erhalten, was Sie möchten und um sich selbst davon abzuhalten Laden Sie alle Archive.org oder das Internet herunter.

Verwenden Sie -D www.examle.com,www.another.example.comdiese Option, um nur die Domänen auf die weiße --exclude-domains www.examle.com,www.another.example.com Liste zu setzen, die Sie nicht verwenden möchten.

Danke, aber das Problem mit White / Blacklisting ist, dass _all_ archivierte Websites vom `web.archive.org`-Host stammen. Ich möchte alles spiegeln, was "wget ​​-np" gespiegelt hätte, wenn die ursprüngliche Website noch online war. `-l` hilft auch nicht viel, da es auf 3 oder 4 erhöht werden muss, was zu einem Aufsteigen der Websitehierarchie führt. mpy vor 10 Jahren 0
0
Brian

Das Format der URLs für das Internetarchiv umfasst das Datum und die Uhrzeit, zu der die Site archiviert wurde. Um Speicherplatzressourcen zu speichern, die nicht geändert wurden, werden sie mit einer früheren Version einer Site verknüpft.

In dieser URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/ war das Datum, an dem die Website gecrawlt wurde, der 29. Februar 2000 um 12:33 Uhr und 40 Sekunden.

Um alle von http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/Ihnen anzufangen, müssen Sie damit anfangen, aber auch alle verknüpften Assets ausnutzen http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.

Genau, und das ist das Problem. Nehmen wir an, die Seite A ist mit B verknüpft. Die aktuelle Version A verweist auf die alte Version B. Aber B enthält auch einen Link zu A. Daher wird auch die alte Version von A abgerufen und wieder mit der älteren Version verknüpft. Dies führt bei einer (erforderlichen) Durchforstungstiefe von 4 dazu, dass Sie Dutzende Versionen der Indexseite erhalten, jedoch nicht alle benötigten Dateien. mpy vor 10 Jahren 0