news, hacks, programme, logs,
tipps und tricks rund um das internet

Artikel / Tipps und Tricks Forum 
Snapshot Cleaner - Wie archiviert man Webseiten ?

Eine dynamische und datenbankgesteuerte Webseite soll "ausgemustert" werden. Diese Seite wird nicht mehr verwendet und sollte in einem Format archiviert werden, dass leicht portierbar und langlebig ist. Langlebig heisst, dass auch bei einer Umstellung des ganzen Webservers die Seite mit sehr wenig bis gar keinem Aufwand übertragen werden kann. Dazu wird ein Snapshot der Seite gemacht.

Autor: tom - Date: 02.04.2005 - Size: 5048 chars - Hits / Day: 0.14 - Total Hits: 9551
 Download  sc.jar   Size: 10 kb Datum: 04.02.2005
 Download  sc-src.zip   Size: 19 kb Datum: 04.02.2005
Das langlebige Format ist in diesem Fall HTML. Jeder Webserver kann statische Webseiten im HTML Format problemlos verwalten und darstellen. Und da die Seite nicht mehr aktiv genutzt wird, ist eine Umwandlung von dynamischen Seiten in statische HTML Files die beste Wahl.

Wie ein Snapshot einer Seite gemacht wird
Ein Snapshot kann einfach mit dem Programm "wget" generiert werden. Die Optionen sehen wie folgt aus:

wget -r -l 5 -k -p -np url

Die Option -r bedeutet, dass rekursiv in Verzeichnissen gesucht wird, -l 5 kann eine wichtige Option sein, vor allem dann, wenn die Seite nicht optimal programmiert ist und mit Links eine Endlosschleife generiert wird. Diese Option limitiert die Schleife auf 5 Links. -p veranlasst "wget" alle zugehörigen Daten zu laden, die für die Anzeige der Seite nötig sind. Damit lädt man auch zum Beispiel die dazugehörigen  css Files herunter. -np bedeutet, dass nur Links verfolgt werden, die in Unterverzeichnissen liegen. Die Option -k wandelt Links so um, dass sie in einem Dateisystem angeschaut werden können.

Problem 1
links.png
Dateinamen mit "wget" generiert
Die Umwandlung der Dateinamen war nicht optimal und so wurde zum Beispiel ein File mit dem Namen „index.php?id=test“ erstellt. Das Problem ist, dass der Webserver ein File mit dem Namen „test.php“ sucht und versucht den Query „id=test“ zu übergeben. Da dieses File nicht existiert, funktioniert die ganze Verlinkung nicht mehr.

Problem 2
Man kann zwar mit der Option -l 5 eine Endlosschleife verhindern, jedoch hat man 5 Kopien einer gleichen Seite. Anstatt die eigentlichen Daten der Homepage, die in meinem Fall 29MB ausmachten wurden es so ca. 312MB.

Lösung
Ich habe dazu ein Programm mit dem Namen Snapshot Cleaner geschrieben. Es wandelt alle Dateien um die ein ? enthalten. Dabei werden alle Referenzen, die in den anderen HTML Files vorkommen ebenfalls umgewandelt. Zudem erkennt das Programm File Duplikate unabhängig vom Namen und löscht die Duplikate. Dabei werden die Referenzen ebenfalls upgedatet. Die Duplikate werden anhand von gleichen MD5 Checksummen erkannt.

Das Programm kann mit folgenden Optionen gestartet werden:
  • -dup Anweisung um alle Duplikate zu löschen und alle Referenzen, die auf das gelöschte Duplikat verweisen, anzupassen.
  • -ren=[regexp] Der regexp Term ist per default so eingestellt, dass alle Namen welche ein ? erhalten umgewandelt werden.
  • -prefix=[document] Werden Dateien umgewandelt, so erhalten sie den Namen der im Präfix angegeben wird plus eine fortlaufende Zahl.
  • -failsafe=[failsafe] Kleiner Hack, denn es gibt Links bei denen kein Dateiname angegeben wird. Zum Beispiel ist der Link "www.test.bar/index.php?hallo" bei einigen Webservern äquivalent zu diesem Link: "www.test.bar/?hallo". Failsafe expandiert /? nach /failsafe?, wobei ich als failsafe index.php verwendet hatte.
  • -absolute=[url] Wandelt absolute Pfade in relative um.
Das Programm löscht und verändert Daten. Unbedingt ein Backup machen!! Niemals mit Originalen arbeiten, immer mit Kopien!

Das Programm beherrscht nur flache Dateistrukturen, Rekursionen und Links wie "test.html" funktionieren nicht. Das Programm ist unter der LGPL Lizenz verfügbar. Es wird wie folgt aufgerufen:

java -jar sc.jar [options]

In meinem Fall hatte der Befehl so ausgesehen:

java -jar /tmp/sc.jar -dup -ren="(?i).*\?.*" -prefix=document -failsafe=index.php -absolute=http://www.nope.tv/oldschool/10/10.1/ > /home/draft/nope-10.1.log

Tipp für Apache User mit mod_deflate: Daten können mit gzip -9 *.html massiv verkleinert werden. Die Daten werden ebenfalls komprimiert übertragen, falls es der Browser unterstützt. Da die meisten Browser das können, wird viel Bandbreite gespart.

Bemerkungen, Kommentare und Feedback

Du kannst auch selber einen Thread starten, indem du hier klickst.
 Home
Artikel / Tipps und Tricks
Artikel Navigation
Internes
0 Artikel
    Links and Friends
    5 Links
    Artikel erscheinen ungefähr jeden Monat in unregelmässigen Abständen.

    RSS-feed: rss.xml
    Nope bietet keinerlei Garantie für die auf dieser Seite enthaltenen Tipps, Artikel und Programme. Für Schaden, der aus der Anwendung der hier enthaltenen Daten entsteht, übernehmen wir keine Haftung. Die Nope Homepage enthält Links zu anderen Seiten auf deren Inhalte wir keinen Einfluss haben. Wir übernehmen keine Verantwortung für fremde Inhalte und distanzieren uns ausdrücklich davon.© nope.tv. Die Artikel auf dieser Seite, soweit nicht anders im Artikel erwähnt, stehen unter CreativeCommons License. Die Programme auf dieser Seite, soweit nicht anders im Artikel oder Programm erwähnt, stehen unter der GNU Public License (GPL).