Como fazer o download de uma página da Wayback Machine por um intervalo especificado

11

O que quero dizer é fazer o download de cada página disponível na Wayback Machine em um período e intervalo de tempo especificado. Por exemplo, eu quero fazer o download de cada página disponível a partir de cada dia da nature.com de janeiro de 2012 a dezembro de 2012. (Não exatamente o que eu quero fazer, mas está perto o suficiente - e fornece um bom exemplo).

O wget não funciona devido à natureza única de como a máquina Wayback funciona, infelizmente.

Ferramentas como o Wayback Machine Downloader só baixam a versão mais recente da página.

A interação com a IA API parece ser uma rota viável, mas não sei como isso funcionaria.

Obrigado!

    
por orlando marinella 13.03.2017 / 21:49

2 respostas

5

A maneira como wayback URLs são formatados é a seguinte:

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

Aqui BASEURL é geralmente http://web.archive.org/web (eu digo normalmente porque não tenho certeza se é o único BASEURL)

TARGET é auto-explicativo (no seu caso, http://nature.com ou algum URL semelhante)

TIMESTAMP é YYYYmmddHHMMss quando a captura foi feita (em UTC):

  • YYYY : ano
  • mm : Mês (2 dígitos - 01 a 12)
  • dd : dia do mês (2 dígitos - 01 a 31)
  • HH : hora (2 dígitos - 00 a 23)
  • MM : minuto (2 dígitos - 00 a 59)
  • ss : segundo (2 dígitos - 00 a 59)

Caso você solicite um tempo de captura que não exista, a máquina de wayback redireciona para a captura mais próxima desse URL, seja no futuro ou no passado.

Você pode usar esse recurso para obter cada URL diário usando curl -I (HTTP HEAD ) para obter o conjunto de URLs:

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

Isso fornece os URLs mais próximos do meio-dia de cada dia de 2012. Basta remover as duplicatas e fazer o download das páginas.

Observação: o script acima provavelmente pode ser muito melhorado para avançar caso o REDIRECT seja para um URL com mais de um dia no futuro, mas isso exige a desconstrução do URL retornado e o ajuste de START ao valor de data correto.

    
por 23.03.2017 / 09:03
4

Há uma joia rubi no Github: link

    
por 16.03.2017 / 15:52