使用JavaScript脚本批量下载AirSAR数据
最近一个阿里的抢月饼事件将JavaScript脚本这种东西推上了风口浪尖,其实JS脚本是浏览器赋予我们每一个用户的一项“权利”,利用它可以很大程度上将我们从复杂的重复性工作中解放出来。你看,本文用8行JS脚本实现批量下载AirSAR数据的功能。
关于AirSAR数据
AirSAR是比较早期的机载SAR成像数据(1985年),具有P、L和C三个波段的全极化成像能力,许多关于SAR理论的研究中都用到了AirSAR数据。即使在目前,AirSAR仍有多方面的用途。
数据下载分析
首先我们看AirSAR数据的下载地址:https://airsar.asf.alaska.edu/data/cm/(小编注:这里下载的cm的数据,也就是常用的极化SAR数据),通过分析我们可以得出这样的目录结构:
cm1230
--cm1230.gif
--cm1230_3_Frequency_Polarimetry.zip
--cm1230_c.dat
--cm1230_l.dat
--cm1230_meta.airsar
--cm1230_meta.podaac
--cm1230_p.dat
通过观察可以发现.gif是快视图,.zip包含的所有文件(包含快视图和数据及说明文件),.dat分别为P、L、C三个波段的数据成像文件,meta.xxxx为说明文件。所以我们的目标很明确,就是下载所有cmXXXXX目录下的cmXXXX_3_Frequency_Polarimetry.zip文件。
如果按照常规的思路会怎么做?打开一个目录,找到zip文件,右键—另存为;再打开一个目录….;再打开一个…
这当然不是一个好方法,许多同学喜欢使用迅雷等下载工具,它有一个功能是下载本页所有链接;这是一个思路,但是我们的链接显然不在一个页面上,那怎么办?我们可以使用脚本将它变成一个页面上。(注:下载数据前需要在asf.alaska.edu中注册用户哦。)
实现脚本
下面是我写的脚本:
var allAtags = document.querySelectorAll('a');
var reg = /cm+[0-9]/;
[].forEach.call(allAtags, function(a) {
if (reg.test(a.href)) {
var dataName = a.innerText.split('/')[0];
a.href = a.href + dataName + '_3_Frequency_Polarimetry.zip';
}
});
脚本很简单,只用8行。简单解释一下,allAtags
变量用于获取所有页面的 a
标签;然后使用 forEach
方法对所有的 a
标签进行遍历,如果链接中有cm+数字的组合,就说明是我们要下载数据的链接(主要用过过滤几个无关链接),最后将拼接好的地址覆盖原来的地址(href
)。
执行脚本
道理我都懂,可是怎么下载数据?莫急。
使用现代化的浏览器(Chrome/Firefox)打开数据下载页面( F12
进入 控制台
,将代码粘贴到控制台中即会自动执行,如图:
好像没什么变化对么?这时候使用迅雷或者FireFox的DownThemAll插件(这个强烈推荐),下载本页的所有链接,就可以将所有的AirSAR数据下载下来了。
后记
下载数据前请务必在asf.alaska.edu中注册账号,没账号是无法下载的,这也是推荐使用DownThemAll的原因。
什么?对于不会使用脚本还在一个一个下载数据的人来说,这不公平?
更多内容可以 阅读原文 ,会有更多精彩:-)