Как: загрузить страницу с Wayback Machine за указанный интервал

1392
orlando marinella

Я имею в виду загрузку каждой страницы, доступной с Wayback Machine, в течение определенного периода времени и интервала. Например, я хочу загрузить каждую страницу, доступную по каждому дню с сайта Nature.com с января 2012 года по декабрь 2012 года. (Не совсем то, что я хочу сделать, но это достаточно близко - и дает хороший пример.)

К сожалению, wget не будет работать из-за уникальной природы механизма Wayback.

Похоже, такие инструменты, как Wayback Machine downloader, загружают только самую последнюю версию страницы.

Взаимодействие с IA API кажется жизнеспособным маршрутом, но я не уверен, как это будет работать.

Спасибо!

11
Вам обязательно нужно написать скрипт для этого. Может быть, CURL? PulseJet 7 лет назад 0
Я думаю, что можно было бы написать сценарий и опираться на cURL, но я незнаком с API Memento, который использует Интернет-архив, и не думаю, что видел его таким образом. orlando marinella 7 лет назад 0
Мне нужно: а) сделать несколько сайтов одновременно, б) получить снимок каждого сайта за длительный промежуток времени (скажем, с 1998 по 2001 год) и в) указать, сколько снимков я хочу сделать за этот интервал. orlando marinella 7 лет назад 0
Возможный дубликат: https://superuser.com/questions/828907/how-to-download-a-website-from-the-archive-org-wayback-machine PulseJet 7 лет назад 0
Та же проблема. Похоже, им просто нужна одна страница - документация для загрузчика WB Machine расплывчата, независимо от того, работает она через такой интервал или нет. orlando marinella 7 лет назад 0
Просто попробуйте? duenni 7 лет назад 0
@ duenni Да, нет, это не так. orlando marinella 7 лет назад 0

2 ответа на вопрос

5
Samveen

То, как waybackURL - адрес отформатированные следующим образом :

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

Здесь BASEURLобычно http://web.archive.org/web(я говорю обычно, так как я не уверен, что это единственный BASEURL)

TARGETне требует пояснений (в вашем случае http://nature.com, или какой-то похожий URL)

TIMESTAMPэто YYYYmmddHHMMssкогда захват был сделан (в UTC):

  • YYYYГод
  • mm: Месяц (2 цифры - от 01 до 12)
  • dd: День месяца (2 цифры - от 01 до 31)
  • HH: Час (2 цифры - от 00 до 23)
  • MM: Минуты (2 цифры - от 00 до 59)
  • ss: Вторая (2 цифры - от 00 до 59)

В случае, если вы запрашиваете время захвата, которое не существует, машина обратного вызова перенаправляет на ближайший захват для этого URL, будь то в будущем или в прошлом.

Вы можете использовать эту функцию для получения каждого ежедневного URL, используя curl -I(HTTP HEAD), чтобы получить набор 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=$($$START) REDIRECT="$(curl -sI "$BASEURL/$TIMESTAMP/$TARGET" |awk '/^Location/ ')" if [[ -z "$REDIRECT" ]]; then echo "$BASEURL/$TIMESTAMP/$TARGET" else echo $REDIRECT fi START=$((START + 86400)) # add 24 hours done 

Это дает вам URL-адреса, которые ближе к полудню в каждый день 2012 года. Просто удалите дубликаты и и загрузите страницы.

Примечание. Приведенный выше сценарий, вероятно, может быть значительно улучшен для ускорения перехода в случае, если REDIRECTдля URL-адреса будет более 1 дня в будущем, но тогда потребуется деконструкция возвращаемого URL-адреса и корректировка STARTдо правильного значения даты.

Это здорово, почему? потому что у нас есть факты и доказательства того, когда кто-то заархивировал контент, а web.archive.org удалил заархивированный контент в прошлом. Этот скрипт выше сохранит заархивированный контент. Потрясающие. DeerSpotter 7 лет назад 0
4
duenni

На Github есть рубиновый камень: https://github.com/hartator/wayback-machine-downloader

Это круто. DeerSpotter 7 лет назад 0