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


12

Ich versuche, wget zu verwenden, um einen lokalen Spiegel einer Website zu erstellen. Aber ich stelle fest, dass ich nicht alle verlinkten 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/.

Wenn ich benutze 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, z

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

Vielleicht würde es httrack besser machen, aber im Moment packt das zu viel.

Auf welche Weise ist es also möglich, eine lokale Kopie einer archivierten Website vom Internet Archive Wayback Machine abzurufen?


Mann! Ich habe versucht, genau dieselbe Seite zu spiegeln (und ärgere mich wirklich darüber, 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 20110722080716Schnappschuss zugänglich sind , daher wird die -npOption von wget nicht helfen.
mpy

Haben Sie manuell überprüft, ob die fehlenden Seiten tatsächlich archiviert wurden? Archive.org archiviert nicht immer jede einzelne Seite.
Nitro2k01

Antworten:


20

Frühere Antworten sind zwar hilfreich, lösen die zugrunde liegende Frage jedoch nicht präzise, ​​zuverlässig und wiederholbar. In diesem Beitrag gehen wir kurz auf die jeweiligen Schwierigkeiten ein und bieten dann eine bescheidene httrackLösung an.

Hintergrund

Bevor wir jedoch dazu kommen, sollten wir uns die gut geschriebene Antwort von mpy ansehen . In einem leider vernachlässigten Beitrag dokumentiert mpy rigoros das obskure (und ehrlich verschleierte) Archivschema der Wayback Machine.

Es ist nicht überraschend, dass es nicht schön ist. Anstatt Sites in einem einzigen Verzeichnis zu archivieren, verteilt The Wayback Machine eine einzelne Site vorübergehend auf zwei oder mehr numerisch identifizierte Geschwisterverzeichnisse. Zu sagen, dass dies das Spiegeln kompliziert, wäre eine erhebliche Untertreibung.

Das Verständnis der schrecklichen Fallstricke, die dieses Schema mit sich bringt, ist von zentraler Bedeutung für das Verständnis der Unzulänglichkeit früherer Lösungen. Machen wir weiter, sollen wir?

Vorherige Lösung 1: wget

Die verwandte StackOverflow-Frage "Alte Website von Wayback-Maschine wiederherstellen" ist in dieser Hinsicht wahrscheinlich der schlimmste Verstoß und empfiehlt wgetWayback-Spiegelung. Natürlich ist diese Empfehlung grundsätzlich nicht richtig.

Kann nicht verwendet werden, um Wayback-archivierte Websites zuverlässig zu spiegelnPrivoxy , wgetwenn keine komplexen externen URL -Änderungen vorgenommen wurden. Als mpy- Details unter "Problem 2 + Lösung" müssen Sie bei jedem ausgewählten Spiegelungstool zulassen, dass nur URLs heruntergeladen werden, die zur Zielwebsite gehören. Standardmäßig laden die meisten Spiegelungstools alle URLs der Zielwebsite und der von dieser Website verknüpften Websites transitiv herunter. Dies bedeutet im schlimmsten Fall "das gesamte Internet".

Ein konkretes Beispiel ist angebracht. Wenn Sie die Beispieldomäne kearescue.comspiegeln, muss Ihr Spiegelungstool :

  • 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. ).
  • Schließen Sie alle anderen URLs aus. Hierbei handelt es sich um Vermögenswerte, die von anderen Sites bereitgestellt werden, auf die lediglich von der Zielsite aus verwiesen wird (z https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js. B. ).

Wenn solche URLs nicht ausgeschlossen werden, wird in der Regel das gesamte oder der größte Teil des Internets abgerufen, das zum Zeitpunkt der Archivierung der Website archiviert wurde, insbesondere für Websites, in die extern gehostete Elemente (z. B. YouTube-Videos) eingebettet waren.

Das wäre schlimm. Zwar wget bietet es eine Befehlszeilenoption, --exclude-directoriesdie ein oder mehrere Muster akzeptiert, die mit auszuschließenden URLs übereinstimmen, doch handelt es sich hierbei nicht um reguläre Ausdrücke für allgemeine Zwecke. Es handelt sich um vereinfachte Globs, deren *Syntax mit keinem oder mehreren Zeichen außer/ übereinstimmt . Da die auszuschließenden URLs beliebig viele /Zeichen enthalten, wget können diese URLs nicht ausgeschlossen und daher nicht zum Spiegeln von Wayback-archivierten Sites verwendet werden. Zeitraum. Ende der unglücklichen Geschichte.

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

Vorherige Lösung 2: Sammelalbum

Prinz empfiehlt ScrapBook, ein Firefox-Plugin. Ein Firefox-Plugin.

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

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

Obwohl Scrapbook es bisher nicht geschafft hat, die Seite vollständig zu erfassen ...

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

Vorherige Lösung 3: wget + Privoxy

mpy bietet dann eine robuste Lösung, die sowohl wgetals auch verwendet Privoxy. Während wget es einigermaßen einfach zu konfigurieren ist, Privoxyist es alles andere als vernünftig. 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 bestätigen . Es sollte skalierbar und robust funktionieren. Angesichts der Markteintrittsbarrieren eignet sich diese Lösung wahrscheinlich besser für die Automatisierung in großem Maßstab als der durchschnittliche Webmaster, der versucht, kleine bis mittlere Websites wiederherzustellen.

Ist wget+ Privoxyeinen Blick wert? Absolut. Die meisten Superuser könnten jedoch durch einfachere und leichter anwendbare Lösungen besser bedient werden.

Neue Lösung: httrack

Geben Sie httrackein Befehlszeilendienstprogramm ein, das eine Obermenge der wgetSpiegelungsfunktionalität von implementiert . httrackunterstützt sowohl den musterbasierten URL-Ausschluss als auch die vereinfachte Umstrukturierung von Websites. Ersteres löst mpys "Problem 2 + Lösung"; Letzteres "Problem 3 + Lösung."

Ersetzen Sie im folgenden abstrakten Beispiel:

  • ${wayback_url}durch die URL des Verzeichnisses der obersten Ebene, in dem die gesamte Zielsite archiviert wird (z 'https://web.archive.org/web/20140517175612/http://kearescue.com'. B. ).
  • ${domain_name}durch den gleichen Domainnamen, der unter ${wayback_url}Ausschluss des Präfix 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\
    ${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

Am Ende sollte das aktuelle Verzeichnis ein Unterverzeichnis für jeden von dieser URL gespiegelten Dateityp enthalten. Dies umfasst in der Regel mindestens:

  • css, enthält alle gespiegelten CSS-Stylesheets.
  • html, enthält alle gespiegelten HTML-Seiten.
  • js, enthält alles gespiegelte JavaScript.
  • ico, mit einem gespiegelten Favicon.

Da der httrackgesamte heruntergeladene Inhalt intern neu geschrieben wird, um diese Struktur widerzuspiegeln, sollte Ihre Website jetzt ohne Änderungen durchsucht werden können. Wenn Sie den obigen Befehl vorzeitig angehalten haben und den Download fortsetzen möchten, hängen Sie die --continueOption an denselben Befehl an und wiederholen Sie den Vorgang.

Das ist es. Keine externen Verzerrungen, fehleranfälliges Umschreiben von URLs oder regelbasierte Proxy-Server erforderlich.

Viel Spaß, liebe Superuser.


Es freut mich zu hören, dass mindestens eine Person meine Antwort gründlich gelesen hat. Und vielen Dank für Ihre weitere Analyse und die httrack-Lösung. +1
mpy

1
Die httrack-Lösung war perfekt, vielen Dank!
ChrisChinchilla

Ich bin froh, dass ich euch helfen kann. Bedenkt man , wie gut-wrenchingly schrecklich diese Tapisserie des Jammers und Betrug war zu entwirren, ich habe gerade hatte meine Erkenntnisse zu teilen.
Cecil Curry

Um das Ratenübertragungslimit zu entfernen, fügen Sie die folgenden Parameter hinzu: --disable-security-limits --max-rate = 0
Oswaldo

7

Leider konnte keine der Antworten das Problem lösen, einen vollständigen Spiegel von einer archivierten Website zu erstellen (ohne jede Datei ein Dutzend Mal zu duplizieren). Also habe ich einen anderen Ansatz zusammen gehackt. Gehackt ist das wichtige Wort, da meine Lösung weder eine allgemeine noch eine sehr einfache Lösung ist (lesen: Kopieren und Einfügen). Ich habe den Privoxy-Proxyserver verwendet , um die Dateien im laufenden Betrieb neu zu schreiben , während ich sie mit wget gespiegelt habe.

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

Problem 1 + Lösung

Die Wayback-Symbolleiste ist praktisch für die interaktive Verwendung, kann jedoch zu Problemen mit wget führen. Also mit einer Privoxy-Filter-Regel loswerden

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, brauchte also eine nicht allzu kleine Rekursionstiefe. Aber ich möchte nicht, dass der gesamte Server gecrawlt wird. Normalerweise verwenden Sie dazu die Option no-parent-np von wget. Aber das wird hier nicht funktionieren, weil du bekommen 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 Weglassen -npwird dazu führen, dass wir auf (...)http://cst-www.nrl.navy.mildie navi.milWebsite kriechen und schließlich die gesamte Website abrufen . Das will ich definitiv nicht! Dieser Filter versucht also, das -npVerhalten mit der Wayback-Maschine zu emulieren :

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, um in die Syntax zu graben. Dieser Filter bewirkt Folgendes: Er ersetzt alle Wayback-URLs wie http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/durch, http://some.local.server/404sofern sie keine enthalten http://cst-www.nrl.navy.mil/lattice/.

Sie müssen sich anpassen http://some.local.server/404. Hiermit wird ein 404-Fehler an wget gesendet. Wahrscheinlich kann Privoxy das eleganter machen. Der einfachste Weg für mich war jedoch, den Link zu einer nicht existierenden Seite auf einem lokalen http-Server umzuschreiben, also blieb ich dabei.

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

Problem 3 + Lösung

Und schließlich kann eine archivierte Version einer Seite einen Link zu einer Seite in einem anderen Snapshot enthalten. Und das noch zu einem anderen. Und so weiter ... und Sie werden am Ende viele Schnappschüsse derselben Seite haben - und wget wird es nie schaffen, fertig zu werden, bis alle Schnappschüsse abgerufen wurden . Das will ich auch 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 im 20110801041529Schnappschuss enthalten ist. Es leitet Sie automatisch zum richtigen 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]{14})(.{0,3})/|/20120713212803$2/|g

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

Das Schöne daran ist, dass wget den neuen Speicherort, an den 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 der archivierten Site

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

{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org

Sie können Wget wie gewohnt verwenden. Vergessen Sie nicht, wget mitzuteilen, dass der Proxy verwendet werden 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 verwendet, -msollte aber auch funktionieren. Sie werden mit den Ordnern enden

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

Da die Wayback-Maschine Bilder ( im_), Stylesheets ( cs_) usw. trennt , habe ich alles zusammengeführt und Sed Magic verwendet, um die hässlichen relativen Links ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) entsprechend zu ersetzen . Das ist aber nicht wirklich nötig.


1
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 basierenden Lösung, auf die ich schließlich gestoßen bin. Du rockst, mpy.
Cecil Curry

5

wget

--page-requisites
Diese Option veranlasst Wget, alle Dateien herunterzuladen, die für die ordnungsgemäße Anzeige einer bestimmten HTML-Seite erforderlich sind. Dazu gehören eingebettete Bilder, Sounds und referenzierte Stylesheets.

Normalerweise werden beim Herunterladen einer einzelnen HTML-Seite nicht alle erforderlichen Dokumente heruntergeladen, die für die ordnungsgemäße Anzeige erforderlich sind. Die Verwendung von -r zusammen mit -l kann helfen, aber da Wget normalerweise nicht zwischen externen und inlinierten Dokumenten unterscheidet, bleiben im Allgemeinen "Blattdokumente" übrig, bei denen die erforderlichen Angaben fehlen.

Angenommen, Dokument 1.html enthält ein "" Tag, das auf 1.gif verweist, und ein "" Tag, das auf externes Dokument 2.html verweist. Angenommen, 2.html ist ähnlich, aber das Bild ist 2.gif und es wird auf 3.html verlinkt. Angenommen, dies setzt sich bis zu einer willkürlich hohen Zahl fort.

-m
--mirror

Aktivieren Sie die für die Spiegelung geeigneten Optionen. Diese Option aktiviert die Rekursion und die Zeitstempelung, legt die unendliche Rekursionstiefe fest und behält FTP-Verzeichnislisten bei. Es ist derzeit äquivalent zu -r -N -l inf --no-remove-listing.

Beachten Sie, dass Wget sich so verhält, als ob -r angegeben wurde, aber nur diese einzelne Seite und die erforderlichen Elemente heruntergeladen werden. Links von dieser Seite zu externen Dokumenten werden nicht verfolgt. 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://<site>/<document>

SO wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice wird Ihr bester Anzug für Sie 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. Hauptmerkmale sind Leichtigkeit, Geschwindigkeit, Genauigkeit und mehrsprachige Unterstützung. Die wichtigsten Funktionen sind:
* Webseite speichern
* Ausschnitt der Webseite
speichern * Website speichern
* Sammlung wie Lesezeichen organisieren
* Volltextsuche und schnelle Filtersuche in der Sammlung
* Bearbeiten der gesammelten Webseite
* Text / HTML Bearbeitungsfunktion, die den Notizen der Oper ähnelt

So spiegeln Sie eine Site
Installieren Sie das Sammelalbum 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 die Ebene unter In depth Save und drücken Sie save Bildbeschreibung hier eingeben
  4. Wählen Sie Restrict to Drirectory/ Domainaus Filter
    Bildbeschreibung hier eingeben

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


Obwohl Scrapbook die Site bisher nicht vollständig erfassen konnte, war es einer möglichen Lösung näher als die anderen Vorschläge. Insbesondere die Option Nach Zeichenfolge filtern ... war hilfreicher als das Filtern nach Host / Domäne. Daher übergebe ich Ihnen das Kopfgeld:)
mpy

0

Seien Sie vorsichtig mit dem folgenden Befehl, da er viel auf sich zieht. Die 1 nach dem 'l' weist es an, alle Seiten nach Links auf der Site zu durchsuchen, die 1 Ebene tief sind. Wenn Sie möchten, dass es tiefer spinnt, ändern Sie dies in eine 2, aber es könnte niemals enden, da es in einer Schleife hängen bleiben könnte.

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

Ich bin mir nicht sicher, welche Teile der Website Sie behalten möchten und welche Sie nicht interessieren, aber Sie sollten wahrscheinlich die verschiedenen Teile der Website auf eine Whitelist und / oder Blacklist setzen, um nur das zu erhalten, was Sie möchten, und um sich selbst davon abzuhalten Herunterladen aller von archive.org oder dem Internet.

Verwenden Sie -D www.examle.com,www.another.example.comdiese Option, um nur die gewünschten Domains auf die Whitelist zu setzen oder um --exclude-domains www.examle.com,www.another.example.com die nicht gewünschten Domains auf die Blacklist zu setzen.


Danke, aber das Problem mit White / Blacklisting ist, dass alle archivierten Websites vom web.archive.orgHost stammen. Ich möchte alles spiegeln, was wget -npgespiegelt worden wäre, wenn die ursprüngliche Site noch online gewesen wäre. -lhilft auch nicht viel, da es auf 3 oder 4 erhöht werden muss, was dazu führt, dass die Website-Hierarchie zu stark aufsteigt.
mpy

0

Das Format der URLs für das Internetarchiv enthält das Datum und die Uhrzeit der Archivierung der Site. Um Speicherplatz zu sparen, werden unveränderte Elemente mit einer früheren Version einer Site verknüpft.

Beispiel: In dieser URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/ wurde die Website am 29. Februar 2000 um 12:33 und 40 Sekunden gecrawlt.

Also, um alles von http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/Ihnen zu bekommen , müssen Sie damit beginnen, aber auch alle verknüpften Assets abrufen http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.


Genau das ist das Problem. Nehmen wir an, Seite A verweist auf B. Die aktuelle Version A verweist auf die alte Version B. B enthält jedoch auch einen Link zu A. Die alte Version von A wird also ebenfalls abgerufen und verweist erneut auf eine ältere Version. Dies (bei einer (erforderlichen) Durchforstungstiefe von 4) führt dazu, dass Sie am Ende Dutzende Versionen der Indexseite haben, aber nicht alle benötigten Dateien.
mpy

0

Es gibt bereits ein Tool, das das besser macht:

wayback_machine_downloader domain.org 

Um es zu bekommen, muss Ruby installiert sein. Und dann:

gem install wayback_machine_downloader
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.