orl*_*lla 11 webpage download wget
我的意思是在指定的时间段和间隔内从 Wayback Machine 下载可用的每个页面。例如,我想从 2012 年 1 月到 2012 年 12 月从 Nature.com 下载每天可用的每个页面。(这不完全是我想要做的,但已经足够接近了——并且提供了一个很好的例子。)
不幸的是,由于 Wayback 机器工作方式的独特性,wget 将无法工作。
Wayback Machine 下载器之类的工具似乎只能下载该页面的最新版本。
与 IA API 交互似乎是一条可行的途径,但我不确定这将如何运作。
谢谢!
该方式wayback
的URL的格式如下:
http://$BASEURL/$TIMESTAMP/$TARGET
Run Code Online (Sandbox Code Playgroud)
这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 HEAD
)获取每个每日 URL以获取一组 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
Run Code Online (Sandbox Code Playgroud)
这将为您提供最接近 2012 年中午的 URL。只需删除重复项,然后下载页面。
注意:上面的脚本可能可以大大改进以REDIRECT
在将来超过 1 天的 URL 的情况下向前跳转,但是它需要解构返回的 URL,并调整START
为正确的日期值。
归档时间: |
|
查看次数: |
4500 次 |
最近记录: |