平时使用MODIS的数据做科研,都不是使用一天或者几天的数据,都是使用几年的数据。所以介绍一下MODIS的批量下载。

关于MODIS账号的注册和MODIS常用的下载源,可以看我上一篇文章《【MODIS】MODIS数据的常用下载源》,有详细的介绍。

如果还有什么疑问,可以下面留言,或者私信联系我。

生成APP Key

无论哪种方法,我们都需要生成自己的APP Key,这样才能在批量下载的时候通过MODIS网站的验证。


先点击profile,再点击APP Keys进入APP Key的生成页面。


在红色框的位置输入任意的字符串,然后点击绿色框处的creat按钮,就会在紫色框的位置生成一串APP Key,我们要把这串APP Key记下来。

Linux下使用wget批量下载


进入数据地址,点击红框的“See wget Download Command”,然后就会出现绿框展示的内容。将紫色框的***APP_KEY***使用我们自己生成的APP Key替换掉。将
***TARGET_DIRECTORY_ON_YOUR_FILE_SYSTEM***使用我们希望下载到的目录替换掉。

然后就会变成下面的Linux命令

wget -e robots=off -m -np -R .html,.tmp -nH --cut-dirs=3 "https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MOD04_3K/2019/001/" --header "Authorization: Bearer
0C20DA2C-1A5D-11EA-A18D-DD1" -P modis_download

在Linux系统执行这个命令,就会下载这个页面下载所有文件

使用Python批量下载

Python代码的来源:地址

将下面的代码保存为modis_download.py,然后执行

python modis_download.py -s https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MOD04_3K/2019/001/ -d modis_download -t 0C20DA2C-1A5D-11EA-A18D-DD1

-s:后面跟下载数据的页面
-d:后面跟下载到哪个目录
-t:后面跟的是APP Key

from __future__ import (division, print_function, absolute_import, unicode_literals)import argparse
import os
import os.path
import shutil
import systry:from StringIO import StringIO  # python2
except ImportError:from io import StringIO  # python3################################################################################USERAGENT = 'tis/download.py_1.0--' + sys.version.replace('\n', '').replace('\r', '')def geturl(url, token=None, out=None):headers = {'user-agent': USERAGENT}if not token is None:headers['Authorization'] = 'Bearer ' + tokentry:import sslCTX = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)if sys.version_info.major == 2:import urllib2try:fh = urllib2.urlopen(urllib2.Request(url, headers=headers), context=CTX)if out is None:return fh.read()else:shutil.copyfileobj(fh, out)except urllib2.HTTPError as e:print('HTTP GET error code: %d' % e.code(), file=sys.stderr)print('HTTP GET error message: %s' % e.message, file=sys.stderr)except urllib2.URLError as e:print('Failed to make request: %s' % e.reason, file=sys.stderr)return Noneelse:from urllib.request import urlopen, Request, URLError, HTTPErrortry:fh = urlopen(Request(url, headers=headers), context=CTX)if out is None:return fh.read().decode('utf-8')else:shutil.copyfileobj(fh, out)except HTTPError as e:print('HTTP GET error code: %d' % e.code(), file=sys.stderr)print('HTTP GET error message: %s' % e.message, file=sys.stderr)except URLError as e:print('Failed to make request: %s' % e.reason, file=sys.stderr)return Noneexcept AttributeError:# OS X Python 2 and 3 don't support tlsv1.1+ therefore... curlimport subprocesstry:args = ['curl', '--fail', '-sS', '-L', '--get', url]for (k, v) in headers.items():args.extend(['-H', ': '.join([k, v])])if out is None:# python3's subprocess.check_output returns stdout as a byte stringresult = subprocess.check_output(args)return result.decode('utf-8') if isinstance(result, bytes) else resultelse:subprocess.call(args, stdout=out)except subprocess.CalledProcessError as e:print('curl GET error message: %' + (e.message if hasattr(e, 'message') else e.output), file=sys.stderr)return None################################################################################DESC = "This script will recursively download all files if they don't exist from a LAADS URL and stores them to the specified path"def sync(src, dest, tok):'''synchronize src url with dest directory'''try:import csvfiles = [f for f in csv.DictReader(StringIO(geturl('%s.csv' % src, tok)), skipinitialspace=True)]except ImportError:import jsonfiles = json.loads(geturl(src + '.json', tok))# use os.path since python 2/3 both support it while pathlib is 3.4+for f in files:# currently we use filesize of 0 to indicate directoryfilesize = int(f['size'])path = os.path.join(dest, f['name'])url = src + '/' + f['name']if filesize == 0:try:print('creating dir:', path)os.mkdir(path)sync(src + '/' + f['name'], path, tok)except IOError as e:print("mkdir `%s': %s" % (e.filename, e.strerror), file=sys.stderr)sys.exit(-1)else:try:if not os.path.exists(path):print('downloading: ', path)with open(path, 'w+b') as fh:geturl(url, tok, fh)else:print('skipping: ', path)except IOError as e:print("open `%s': %s" % (e.filename, e.strerror), file=sys.stderr)sys.exit(-1)return 0def _main(argv):parser = argparse.ArgumentParser(prog=argv[0], description=DESC)parser.add_argument('-s', '--source', dest='source', metavar='URL', help='Recursively download files at URL',required=True)parser.add_argument('-d', '--destination', dest='destination', metavar='DIR',help='Store directory structure in DIR', required=True)parser.add_argument('-t', '--token', dest='token', metavar='TOK', help='Use app token TOK to authenticate',required=True)args = parser.parse_args(argv[1:])if not os.path.exists(args.destination):os.makedirs(args.destination)return sync(args.source, args.destination, args.token)if __name__ == '__main__':try:sys.exit(_main(sys.argv))except KeyboardInterrupt:sys.exit(-1)

【MODIS】MODIS数据的两种批量下载方法 - Python和Wget相关推荐

  1. Terra Aqua/MODIS遥感图像4种批量下载方式及其速度测评

    摘要:本文研究了MODIS遥感图像的4种下载方式,该方式包括单景下载或批量下载方式,并同时比较了不同方式的下载速度,研究表明:单景下载时,选择LAADS DAAC一个一个点击的方式下载,还算比较快,但 ...

  2. MODIS数据的批量下载方法

    MODIS数据的批量下载方法 经多日查阅资料与自己总结, 在该文章https://blog.csdn.net/sinat_21543185/article/details/80360716(因我当时没 ...

  3. neo4j批量导入数据的两种解决方案

    neo4j批量导入数据的两种解决方案 参考文章: (1)neo4j批量导入数据的两种解决方案 (2)https://www.cnblogs.com/YoungF/p/11632488.html 备忘一 ...

  4. SQL Server 批量插入数据的两种方法(转)

    原文:http://blog.csdn.net/tjvictor/article/details/4360030 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数 ...

  5. 【转载】SQL Server 批量插入数据的两种方法

    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量 ...

  6. SQLServer 批量插入数据的两种方法

    SQLServer 批量插入数据的两种方法- 发布:dxy 字体:[增加 减小] 类型:转载 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用In ...

  7. Mybatis批量插入数据的两种方式

    总体描述 软件开发过程中需要批量插入数据的场景有几种: 从离线文件(excel, csv等)导入大批量数据到系统. 从其它系统定时或者人工同步大批量数据到系统. 程序自身的某些算法执行时会生成大批量数 ...

  8. Servlet获取Excel中数据的两种方式

    Servlet解析Excel文件的两种方式 简单分享一下Servlet通过解析Excel文件得到其中数据的两种方式 第一种:前端获取 思路:通过layui的第三方插件 layui.excel 解析ex ...

  9. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

最新文章

  1. 太赞了!副业月入3W的技术大佬的公众号,学起来!
  2. Socket笔记【转】
  3. 多元分布和狄利克雷分布
  4. 使用zlib库进行数据压缩
  5. Win7 下打开wifi共享的方法
  6. AT2064-[AGC005F]Many Easy Problems【NTT】
  7. flask-sqlalchemy mysql_Flask SQLAlchemy连接到MySQL数据库
  8. clickhouse的ReplacingMergeTree引擎实战
  9. Java RandomAccessFile getFilePointer()方法与示例
  10. *推荐* 杏雨梨云U盘系统2011 全面加速 [2010.12.28]
  11. ARM Cortex-A53 Cache与内存的映射关系以及Cache的一致性分析
  12. 网易云api普通评论爬取的反馈
  13. 华为android强刷系统下载地址,华为C8815官方rom固件刷机包下载_华为C8815系统强刷升级包...
  14. 2022-2028年中国高尔夫GPS手表行业竞争现状及投资策略研究报告
  15. 论文参考文献正确插入方法 (一)
  16. win7系统如何升级安装win11正式版,win7升级win11系统的方法
  17. 11083 旅游背包
  18. colorAccent,colorPrimary,colorPrimaryDark……来这里你就明白了
  19. 一次性下载《R语言实战2》全书的R包及常用的R包
  20. Linux系统引导过程及排除启动故障

热门文章

  1. 凯立德地图版本号/特征码/激活码信息查询方法
  2. Pandas-数据选取
  3. 如何使用GitHub创建一个自己的博客并且上传
  4. B站发布首个8K视频,CCTV-8K频道即将开播,一大堆8K利好消息正在到来,8K赛道要开启加速度了吗?
  5. 宇视阿宇NVR的命名规则是?
  6. webuploader多图片 php,php+WebUploader图片批量上传
  7. 使用node.js+express+multer实现文件的上传
  8. android设备wifi无线adb调试
  9. outlook2010查看邮箱服务器,怎么设置Microsoft Outlook2010邮箱
  10. mysql无法远程连接 111_如何解决远程连接mysql出现Can’t connect to MySQL server on (111 “Connection refused”)的问题...