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


11

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

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

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

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

Благодарность!


Вам обязательно нужно написать сценарий для этого. Может быть, CURL?
PulseJet

Я думаю, что можно было бы написать сценарий и опираться на cURL, но я незнаком с API Memento, который использует Интернет-архив, и не думаю, что видел его таким образом.
Орландо Маринелла

Мне нужно: а) сделать несколько сайтов одновременно, б) получить снимок каждого сайта за длительный интервал (скажем, с 1998 по 2001 год) и в) указать, сколько снимков я хочу сделать за этот интервал.
Орландо Маринелла

Возможный дубликат: superuser.com/questions/828907/…
PulseJet

Та же проблема. Похоже, им нужна только одна страница - документация для загрузчика WB Machine расплывчата, независимо от того, работает она через такой интервал или нет.
Орландо Маринелла

Ответы:


5

То , как 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=$(${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

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

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


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

Он загружает только основной файл, но не имеет отношения к js, html, css.
Цель

На самом деле этот скрипт ничего не загружает : он просто показывает ближайший URL. Вы можете подключить этот URL wgetили любой другой page-getterс правильными параметрами (обратите внимание на -Iвариант curl).
Самвин

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.