Shu

记录表明我曾经活着

如何批量下载EOS/NASA/USGS/MODIS数据

Lele Shu / 2021-11-16


首先你要确保有已经拥有earth Data的账户。如果没有,请先申请,申请链接在此https://disc.gsfc.nasa.gov/#top

方法1:wget在Linux/Mac上的使用

本节基本内容来自NASA的数据说明 https://disc.gsfc.nasa.gov/data-access

1.1 安装wget

在mac上,需要事先安装homebrew,然后再安装wget。 安装wget方法只需一行命令:

brew install wget

1.2 下载

1.2.1 明文密码下载

wget --user=<uid> --password=<password> <url>

<uid><password><url>分别为用户名,密码和欲下载的文件/文件夹链接。

明文下载是最简单粗暴的方式,但是用户名和密码都是明文的,如果写成脚本存储在本地也可以,但就是对自己的账号不太安全。但如果你对自己的密码没那么在乎,你可能不需要看下面一节的内容。直接跳过下一节,查看更复杂的wget参数一节。

1.2.2 用Cookie方式下载

1.2.2.1 创建.netrc文件

步骤为:

cd ~
touch .netrc
chmod 0600 .netrc
echo "machine urs.earthdata.nasa.gov login <uid> password <password>" >> .netrc

此处<uid>是你的用户名,<password>是你的密码。至此,你已经准备好了.netrc文件,保存好了你的用户名和密码。

此处我们距离使用了远程主机名称为urs.earthdata.nasa.gov,请根据你下载数据的具体服务器名称修改。

1.2.2.2 创建.urs_cookies文件

cd ~
touch .urs_cookies

如果你有过错误的登录,此处可能需要重新创建.urs_cookies文件。

1.2.2.3 用cookie下载文件

注意:<url>就是你要下载的目标文件或者文件夹。

单个文件/文件夹

wget --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies <url>

如果你的<url>是文件名字,则以上命令下载该文件,并存储到当前命令行所在的目录。

如果你的<url>是文件夹的名字,则以上命令下载该文件夹内的所有文件,并存储到当前命令行所在的目录。

层级结构的文件夹内所有文件

例如某文件内有如下结构

-data
  -2000
    -001
    -002
    -003
    -004
  -2001
  -2002

我们执行以下命令

wget --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --auth-no-challenge=on --keep-session-cookies <url>/2000/

则可以获得2000以下所有邮件夹及其文件内容。

更复杂的wget参数

  • -c 开启断点续传
  • -r 递归下载,会下载你指定文件夹下面所有- 目录结构和文件。
  • -l, –level=NUMBER 最大递归深度 (inf 或 - 0 代表无穷).
  • -np, –no-parent 不要追溯到父目录
  • -x 会强制建立服务器上一模一样的目录
  • -nH, –no-host-directories 不创建主机目录
  • -v, –verbose 冗长模式(这是缺省设置)
  • -nv, –non-verbose 关掉冗长模式,但不是安静模式
  • -P , –directory-prefix=PREFIX 将文件另存到目录 PREFIX/…

方法二: Chrono——Chrome插件

此方法适用于Windows, Linux和Mac,只需要安装Chrome之后,安装上Chrono插件即可。

具体方法可以查看一下链接: https://www.chronodownloader.net

常见问题

  1. 为啥我的链接无效?

    要验证链接是否有效,可以直接把链接放入游览器(Edge, Safari,Chrome, Firefox等)访问,如果可以看到网页上的文件/文件夹列表,表示至少你的链接是有效的。如果看不到列表,则表示链接本身有问题,请检查链接后再试。

  2. 下载失败

    下载失败的原因有可能是因为IP被封或者服务器禁用了咱们的IP段。可以尝试用VPN下载。例如在Mac的Terminal终端里面使用export设置vpn,然后尝试下载。

脚本下载

脚本下载其实非常简单,就是把以上下载命令写入到一个shell脚本里面,每次下载的时候,直接执行该脚本即可。

例如,我写了一个文件叫GLDAS2021.sh就是用来下载GLDAS 2021年数据的,文件内容是:

wget --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --keep-session-cookies -r -c -nH -np -x  -A '*.nc4' -P ./ http://hydro1.gesdisc.eosdis.nasa.gov/data//GLDAS/GLDAS_NOAH025_3H.2.1/2021/

该脚本会下载数据集合GLDAS_NOAH025_3H.2.1下2021年所有*.nc4的数据到本地目录./(即命令执行的位置),并生成与服务器一模一样的目录结构,即data//GLDAS/GLDAS_NOAH025_3H.2.1/2021/的结构。其结果类似于下图:

gldas