我的意思是在指定的时间段和间隔内下载 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)
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 的最近捕获时间,无论是将来还是过去。
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。只需删除重复项,然后下载页面即可。
注意:如果REDIRECT
URL 是未来 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