Gewusst wie: Laden Sie eine Seite in einem bestimmten Intervall von der Wayback-Maschine herunter

11

Ich meine, jede Seite, die über einen bestimmten Zeitraum und ein bestimmtes Intervall von der Wayback-Maschine verfügbar ist, herunterzuladen. Zum Beispiel möchte ich von Januar 2012 bis Dezember 2012 jede Seite herunterladen, die an jedem Tag von nature.com verfügbar ist. (Nicht genau das, was ich tun möchte, aber es ist nah genug - und bietet ein gutes Beispiel.)

wget funktioniert aufgrund der einzigartigen Funktionsweise der Wayback-Maschine leider nicht.

Tools wie der Wayback Machine Downloader laden anscheinend nur die neueste Version der Seite herunter.

Die Interaktion mit der IA-API scheint ein praktikabler Weg zu sein, aber ich bin mir nicht sicher, wie das funktionieren würde.

Vielen Dank!

Orlando Marinella
quelle
Sie müssten definitiv ein Skript dafür schreiben. Vielleicht CURL?
PulseJet
Ich denke, es wäre möglich, ein Skript zu schreiben und sich auf cURL zu stützen, aber ich bin mit der Memento-API, die das Internetarchiv verwendet, nicht vertraut und glaube nicht, dass ich sie so gesehen habe.
Orlando Marinella
Ich muss a) mehrere Sites gleichzeitig ausführen, b) einen Snapshot von jedem Site über einen langen Zeitraum (z. B. 1998 bis 2001) erstellen und c) angeben können, wie viele Snapshots ich in diesem Intervall aufnehmen möchte.
Orlando Marinella
Mögliche doppelte: superuser.com/questions/828907/...
Verpuffungsstrahltriebwerk
Gleiches Problem. Sie wollen anscheinend nur eine Seite - die Dokumentation für den WB Machine-Downloader ist vage, ob er über ein solches Intervall funktioniert oder nicht.
Orlando Marinella

Antworten:

5

Die Art und Weise waybackURLs formatiert sind , sind wie folgt:

http://$BASEURL/$TIMESTAMP/$TARGET

Hier BASEURList normalerweise http://web.archive.org/web(ich sage normalerweise, da ich nicht sicher bin, ob es die einzige BASEURL ist)

TARGETist selbsterklärend (in Ihrem Fall http://nature.comoder eine ähnliche URL)

TIMESTAMPist, YYYYmmddHHMMsswann die Aufnahme gemacht wurde (in UTC):

  • YYYY: Jahr
  • mm: Monat (2-stellig - 01 bis 12)
  • dd: Tag des Monats (2-stellig - 01 bis 31)
  • HH: Stunde (2-stellig - 00 bis 23)
  • MM: Minute (2-stellig - 00 bis 59)
  • ss: Zweitens (2-stellig - 00 bis 59)

Wenn Sie eine Erfassungszeit anfordern, die nicht vorhanden ist, leitet der Wayback-Computer zur nächsten Erfassung für diese URL weiter, ob in der Zukunft oder in der Vergangenheit.

Mit dieser Funktion können Sie jede tägliche URL mithilfe von curl -I(HTTP HEAD) abrufen , um die URLs abzurufen:

BASEURL='http://web.archive.org/web'
TARGET="SET_THIS"
START=1325419200 # Jan 1 2012 12:00:00 UTC (Noon) 
END=1356998400 # Tue Jan  1 00:00:00 UTC 2013
if uname -s |grep -q 'Darwin' ; then
    DATECMD="date -u '+%Y%m%d%H%M%S' -r "
elif uname -s |grep -q 'Linux'; then
    DATECMD="date -u +%Y%m%d%H%M%S -d @"
fi


while [[ $START -lt $END ]]; do
    TIMESTAMP=$(${DATECMD}$START)
    REDIRECT="$(curl -sI "$BASEURL/$TIMESTAMP/$TARGET" |awk '/^Location/ {print $2}')"
    if [[ -z "$REDIRECT" ]]; then
        echo "$BASEURL/$TIMESTAMP/$TARGET"
    else
        echo $REDIRECT
    fi
    START=$((START + 86400)) # add 24 hours
done

Auf diese Weise erhalten Sie die URLs, die an jedem Tag des Jahres 2012 am nächsten am Mittag liegen. Entfernen Sie einfach die Duplikate und und laden Sie die Seiten herunter.

Hinweis: Das obige Skript kann wahrscheinlich erheblich verbessert werden, um vorwärts zu springen, falls REDIRECTes sich um eine URL handelt, die länger als 1 Tag in der Zukunft liegt. Dann muss die zurückgegebene URL dekonstruiert und STARTauf den richtigen Datumswert angepasst werden.

Samveen
quelle
Das ist großartig, warum? weil wir Fakten und Beweise dafür haben, wann jemand Inhalte archiviert hat und web.archive.org archivierte Inhalte in der Vergangenheit entfernt hat. Dieses obige Skript würde archivierten Inhalt speichern. Genial.
DeerSpotter
Es wird jedoch nur die Hauptdatei heruntergeladen und nicht verwandte js, html, css.
Zweck
Eigentlich lädt dieses Skript nichts herunter : Es zeigt nur die nächstgelegene URL. Sie können diese wgetoder eine andere URL page-gettermit den richtigen Optionen einstecken (beachten Sie die -IOption zu curl).
Samveen