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?
linux
wget
httrack
webarchive
user695322
quelle
quelle
20110722080716
Schnappschuss zugänglich sind , daher wird die-np
Option von wget nicht helfen.Antworten:
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
httrack
Lö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
wget
Wayback-Spiegelung. Natürlich ist diese Empfehlung grundsätzlich nicht richtig.Kann nicht verwendet werden, um Wayback-archivierte Websites zuverlässig zu spiegeln
Privoxy
,wget
wenn 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.com
spiegeln, muss Ihr Spiegelungstool :https://web.archive.org/web/*/http://kearescue.com
. Dies sind Assets, die vom Zielstandort bereitgestellt werden (zhttps://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js
. B. ).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-directories
die 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
‚sFilter 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
ScrapBook
das frühere Problem überhaupt adäquat angegangen wird. Wie mpy zugibt: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
wget
als auch verwendetPrivoxy
. Währendwget
es einigermaßen einfach zu konfigurieren ist,Privoxy
ist es alles andere als vernünftig. Oder einfach.Aufgrund der unüberwindlichen technischen Hürde bei der ordnungsgemäßen Installation, Konfiguration und Verwendung
Privoxy
mü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
+Privoxy
einen 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
httrack
ein Befehlszeilendienstprogramm ein, das eine Obermenge derwget
Spiegelungsfunktionalität von implementiert .httrack
unterstü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 isthttp://
(z'kearescue.com'
. B. ).Auf geht's. Installieren Sie
httrack
, öffnen Sie ein Terminalfenstercd
in dem lokalen Verzeichnis , in das Ihre Site heruntergeladen werden soll, und führen Sie den folgenden Befehl aus: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
httrack
gesamte 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--continue
Option 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.
quelle
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
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 willstaber auch
(Beachten Sie den geänderten Zeitstempel in den Pfaden). Das Weglassen
-np
wird dazu führen, dass wir auf(...)http://cst-www.nrl.navy.mil
dienavi.mil
Website kriechen und schließlich die gesamte Website abrufen . Das will ich definitiv nicht! Dieser Filter versucht also, das-np
Verhalten mit der Wayback-Maschine zu emulieren :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/404
sofern sie keine enthaltenhttp://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
auch wenn es nicht im
20110801041529
Schnappschuss enthalten ist. Es leitet Sie automatisch zum richtigen um:Also ein weiterer Privoxy-Filter, um alle Snapshots auf den neuesten zu schreiben
Tatsächlich wird jede 14-stellige Zahl, die in eingeschlossen ist,
/.../
durch ersetzt20120713212803
(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 inuser.action
viaSie können Wget wie gewohnt verwenden. Vergessen Sie nicht, wget mitzuteilen, dass der Proxy verwendet werden soll:
Ich habe diese Optionen verwendet,
-m
sollte aber auch funktionieren. Sie werden mit den Ordnern endenDa 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.quelle
wget
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, einefirefox
Erweiterungscrapbook
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
Restrict to Drirectory
/Domain
aus FilterWarten Sie, bis die Spiegelung abgeschlossen ist. Nach dem Spiegeln können Sie über das
ScrapBook
Menü offline auf die Website zugreifen .quelle
:)
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.
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.com
diese 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.quelle
web.archive.org
Host stammen. Ich möchte alles spiegeln, waswget -np
gespiegelt worden wäre, wenn die ursprüngliche Site noch online gewesen wäre.-l
hilft auch nicht viel, da es auf 3 oder 4 erhöht werden muss, was dazu führt, dass die Website-Hierarchie zu stark aufsteigt.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 abrufenhttp://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/
.quelle
Es gibt bereits ein Tool, das das besser macht:
Um es zu bekommen, muss Ruby installiert sein. Und dann:
quelle