||
这个文章主要以modis产品为例,讲述如何利用requests代码库实现卫星数据的自动化下载。
Modis卫星数据产品主要存在的LP DAAC数据中心(https://lpdaac.usgs.gov/tools/data-pool/),这个数据中心的数据登录后都可以从网页上直接免费下载。
requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。
LP DAAC数据中心的MODIS数据需要登录授权后才能自动下载;因此,首先需要建立一个登录的授权文件,这个你可以使用netrc库帮助你建立,也可以自己建立,你可以在你的文件目录下建立一个.netrc的文件,里面存在你的授权网址、账户名和密码,如下:
这样做的好处是利用账户信息的管理,如果你想省事也可以将你的requests的auth直接添加你的账户名和密码:
request.get(...,auth=('username','password'),...)
之后就可以利用requests库获取待下载数据的信息,建立下载文件和下载数据。
# -*- coding: utf-8 -*- """ Created on Mon Jul 22 10:52:54 2019 @author: YchZhu """ # 导入数据库 import os import time import requests from netrc import netrc # 待下载数据的下载链接 f = ' # 数据的存在位置saveDir = 'C:\\Users\\YchZhu\\Downloads'# 数据的保存名称:和数据下载名称一致 saveName = os.path.join(saveDir, f.split('/')[-1].strip())# 授权信息的存放路径netrcDir = os.path.expanduser("~\.netrc") # 带授权的网址 urs = 'Earthdata Login' # Earthdata URL to call for authentication # Create and submit request and download file with requests.get(f.strip(), stream=True, auth=(netrc(netrcDir).authenticators(urs)[0], netrc(netrcDir).authenticators(urs)[2])) as response: if response.status_code != 200: print("{} not downloaded. Verify that your username and password are correct in {}") else: start = time.time() #开始时间 size = 0 # data of download content_size = int(response.headers['Content-Length']) #总大小 print('file size:'+str(content_size)+' bytes') print('[文件大小]:%0.2f MB' % (content_size/1024/1024)) response.raw.decode_content = True content = response.raw with open(saveName, 'wb') as d: while True: chunk = content.read(16 * 1024) if not chunk: break d.write(chunk) size +=len(chunk) #已下载数据大小 # 显示下载进度条 print('\r'+'[下载进度]:%s%.2f%%' %('>'*int(size*50/content_size),float(size/content_size*100)),end='') print('Downloaded file: {}'.format(saveName)) end = time.time() #结束时间 print('\n'+"全部下载完成!用时%0.2f秒"%(end-start))
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 09:17
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社