Instrukcje: Pobierz stronę z Wayback Machine w określonym przedziale czasu

11

Chodzi mi o to, aby pobrać każdą stronę dostępną z Wayback Machine w określonym czasie i przedziale czasowym. Na przykład chcę pobrać każdą stronę dostępną każdego dnia z nature.com od stycznia 2012 r. Do grudnia 2012 r. (Nie dokładnie to, co chcę zrobić, ale jest wystarczająco blisko - i stanowi dobry przykład).

Niestety, wget nie będzie działał ze względu na wyjątkowy charakter działania maszyny Wayback.

Wygląda na to, że narzędzia takie jak Wayback Machine downloader pobierają tylko najnowszą wersję strony.

Interakcja z interfejsem IA API wydaje się realną trasą, ale nie jestem pewien, jak by to działało.

Dzięki!

Orlando Marinella
źródło
Na pewno będziesz musiał napisać do tego skrypt. Może cURL?
PulseJet,
Myślę, że byłoby możliwe napisanie skryptu i oparcie się na cURL, ale nie znam interfejsu API Memento, z którego korzysta Archiwum Internetowe, i nie sądzę, że widziałem go w ten sposób.
Orlando Marinella
Muszę: a) Wykonać wiele witryn jednocześnie, b) pobrać migawkę każdej witryny w długim okresie (powiedzmy od 1998 do 2001), oraz c) móc określić, ile migawek chcę przejąć w tym okresie.
Orlando Marinella
Możliwy duplikat: superuser.com/questions/828907/…
PulseJet
Taki sam problem. Wydaje się, że chcą tylko jednej strony - dokumentacja programu do pobierania WB Machine jest niejasna, czy działa w takim przedziale czasu, czy nie.
Orlando Marinella

Odpowiedzi:

5

Sposób waybackformatowania adresów URL jest następujący:

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

Oto BASEURLzwykle http://web.archive.org/web(mówię zwykle, ponieważ nie jestem pewien, czy jest to jedyny BASEURL)

TARGETnie wymaga wyjaśnień (w twoim przypadku http://nature.comlub podobny adres URL)

TIMESTAMPma miejsce, YYYYmmddHHMMsskiedy dokonano przechwytywania (w UTC):

  • YYYY: Rok
  • mm: Miesiąc (2 cyfry - od 01 do 12)
  • dd: Dzień miesiąca (2 cyfry - od 01 do 31)
  • HH: Godzina (2 cyfry - od 00 do 23)
  • MM: Minuta (2 cyfry - od 00 do 59)
  • ss: Drugi (2 cyfry - od 00 do 59)

Jeśli poprosisz o czas przechwytywania, który nie istnieje, maszyna zwrotna przekierowuje do najbliższego przechwytywania dla tego adresu URL, czy to w przyszłości, czy w przeszłości.

Możesz użyć tej funkcji, aby uzyskać każdy dzienny adres URL za pomocą curl -I(HTTP HEAD), aby uzyskać zestaw adresów URL:

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

Dzięki temu otrzymasz adresy URL, które są najbliżej południa każdego dnia 2012 roku. Wystarczy usunąć duplikaty i pobrać strony.

Uwaga: powyższy skrypt można prawdopodobnie znacznie ulepszyć, aby przejść do przodu w przypadku, gdy REDIRECTadres URL jest dłuższy niż 1 dzień w przyszłości, ale wtedy wymaga zdekonstruowania zwróconego adresu URL i dostosowania STARTdo prawidłowej wartości daty.

Samveen
źródło
To wspaniale, dlaczego? ponieważ mamy fakty i dowody, kiedy ktoś zarchiwizował treść, a web.archive.org usunął zarchiwizowaną zawartość w przeszłości. Powyższy skrypt zapisuje zarchiwizowaną zawartość. Niesamowite.
DeerSpotter
Pobiera tylko główny plik, a nie powiązane pliki js, html, css.
Cel
W rzeczywistości ten skrypt nic nie pobiera : pokazuje tylko najbliższy adres URL. Możesz podłączyć ten adres URL do wgetdowolnego innego page-getterz odpowiednimi opcjami (zwróć uwagę na -Iopcję curl).
Samveen