如何:在指定时间间隔内从 Wayback Machine 下载页面

如何:在指定时间间隔内从 Wayback Machine 下载页面

我的意思是在指定的时间段和间隔内下载 Wayback Machine 上可用的每个页面。例如,我想下载 2012 年 1 月至 2012 年 12 月期间 nature.com 上每天可用的每个页面。(这不是我想要做的,但已经足够接近了——并且提供了一个很好的例子。)

不幸的是,由于 Wayback 机器的独特工作方式,wget 无法工作。

看起来,Wayback Machine 下载器之类的工具只能下载页面的最新版本。

与 IA API 交互似乎是一条可行的途径,但我不确定它将如何工作。

谢谢!

答案1

URL 的格式wayback如下:

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

这里BASEURL通常是http://web.archive.org/web(我说通常是因为我不确定它是否是唯一的 BASEURL)

TARGET是不言自明的(在你的情况下http://nature.com,或一些类似的 URL)

TIMESTAMPYYYYmmddHHMMss捕获时间(UTC 时间):

  • YYYY: 年
  • mm:月份(2 位数字 - 01 至 12)
  • dd:月份中的日期(2 位数字 - 01 至 31)
  • HH:小时(2 位数字 - 00 至 23)
  • MM:分钟(2 位数字 - 00 至 59)
  • ss:秒(2 位数字 - 00 至 59)

如果您请求的捕获时间不存在,则回程机器会重定向到该 URL 的最近捕获时间,无论是将来还是过去。

curl -I您可以使用该功能通过(HTTP )获取每个每日 URL,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

这样您就可以获得 2012 年每天最接近中午的 URL。只需删除重复项,然后下载页面即可。

注意:如果REDIRECTURL 是未来 1 天以上的日期,上述脚本可能需要进行很大改进才能向前跳转,但随后需要解构返回的 URL,并调整START为正确的日期值。

答案2

Github 上有一个 ruby​​ 宝石:https://github.com/hartator/wayback-machine-downloader

答案3

对于那些更倾向于 Python 的人来说,还有一个不错的 Python 包:

https://github.com/jsvine/waybackpack

它非常简单:

waybackpack dol.gov -d ~/Downloads/dol-wayback --to-date 1996

相关内容