请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

搜索
查看: 126|回复: 0

nsidc数据wget批量下载

[复制链接] |关注本帖

新浪微博达人勋

 成长值: 19005

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 葫芦爷儿 于 2019-6-11 20:14 编辑

【前提】 最近有同学问如何批量下载海冰密集度的数据,很久前在家园里了解到了wget,今天以这个为例整理一哈…当然,实现的方式还有很多,这里用的是shell来完成。

A【数据】
A.1 数据名Sea Ice Concentrations from Nimbus-7 SMMR and DMSP SSM/I-SSMISPassive Microwave Data, Version 1
A.2 数据主页 https://nsidc.org/data/nsidc-0051/
数据说明 https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/
表1 数据介绍
图片1.png
B 【需求】
B.1 需要下载该数据集海冰的数据,由于数据存放方式是根据时间建立的路径,需要遍历下载。如/n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/2000.04.22
图2.png
图1 数据存放示意图
C【实现方式】
创建文件$ vim down_sea_ice.sh
根据需求修改代码

在终端中$bashdown_sea_ice.sh
图3.png

图2 下载示意图


C.1 使用语言:shell。MATLAB、python等也可,后面介绍。
C.2 思路:通过wget进行下载
利用shell,设置起始时间和结束时间,循环生成每个路径后,再利用wget进行下载。

C.3 代码
  1. #
  2. # https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/2010.01.05/

  3. startdate=2000-01-01
  4. enddate=2010-12-31

  5. sDateTs=`date -j -f "%Y-%m-%d" $startdate "+%s"`
  6. eDateTs=`date -j -f "%Y-%m-%d" $enddate "+%s"`
  7. dateTs=$sDateTs
  8. offset=86400

  9. while [ "$dateTs" -le "$eDateTs" ]
  10. do
  11.           date=`date -j -f "%s" $dateTs "+%Y-%m-%d"`
  12.           year=`date -j -f "%s" $dateTs "+%Y"`
  13.           month=`date -j -f "%s" $dateTs "+%m"`
  14.           day=`date -j -f "%s" $dateTs "+%d"`
  15.           printf "wget --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --keep-session-cookies --no-check-certificate --auth-no-challenge=on -r --reject \047index.html*\047 -np -e robots=off https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/%s.%s.%s/nt_%s%s%s_n07_v1.1_n.bin\n" $year $month $day $year $month $day
  16.             
  17.          wget --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --keep-session-cookies --no-check-certificate --auth-no-challenge=on  -r --reject 'index.htm;*' -c -np -e robots=off -A "*_n.*" "https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/${year}.${month}.${day}/"   
  18.           dateTs=$(($dateTs+$offset))
  19. done
复制代码

代码中配置时间,循环时间,生成路径,wget下载【linux】
wget--load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies--keep-session-cookies --no-check-certificate --auth-no-challenge=on  -r --reject 'index.htm;*' -c -np -erobots=off -A "*_n.*" "https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/${year}.${month}.${day}/"   
【windows】
wget--http-user=[USERNAME] --http-password=[PASSWORD] --load-cookies mycookies.txt--save-cookies mycookies.txt --keep-session-cookies--no-check-certificate--auth-no-challenge -r --reject "index.html*" –c-np -e robots=off -A "*_n.*""https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/${year}.${month}.${day}/"   
基本参考冰雪中心给的下载方式(下面有网址),额外加了
1. -c:断点
2. -A "*_n.*" :通配符,可下载北极的数据,见图1中的蓝色方框。若只下载bin文件,则改为-A "*_n.bin"
3. https://n5eil01u.ecs.nsidc.org/PM/NSIDC-0051.001/${year}.${month}.${day}/路径用变量传入

参考网址:https://nsidc.org/support/faq/what-options-are-available-bulk-downloading-data-https-earthdata-login-enabled

示意图.png

图3 程序示意图
C.4 遇到的问题:
最初使用了绝对路径,发现出现了404错误,排查发现是
文件名是nt_20100105_f17_v1.1_n.bin。之前以为‘f17‘是不变的。
下面是错误记录


【报错】 下载2000年的数据发现404报错
wget --load-cookies ~/.urs_cookies --save-cookies~/.urs_cookies --keep-session-cookies --no-check-certificate--auth-no-challenge=on -r --reject 'index.html*' -np -e robots=offhttps://n5eil01u.ecs.nsidc.org/P ... 0104_n07_v1.1_n.bin
Resolving n5eil01u.ecs.nsidc.org... 128.138.97.102
Connecting to n5eil01u.ecs.nsidc.org|128.138.97.102|:443...connected.
HTTP request sent, awaiting response... 404 Not Found
2019-06-11 16:12:17 ERROR 404: Not Found.
【原因】 文件名发生变化 变成了f07 不是 n07
nt_20100105_f17_v1.1_n.bin
【解决思路】
1 找到f编号的规则
或者 变通配符

参考


记录人:葫芦爷儿(yaochenyang@stu.shmtu.edu.cn
时间 2019/6/11



down_sea_ice_v3.sh

1.1 KB, 下载次数: 2, 下载积分: 金钱 -5

密码修改失败请联系qq:937062711
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表