NASA‘s EOSDIS网站 由于之前token是字典类型,前段时间token方法又做了改变,文章就新政下数据下载讲解。
但是网站还是支持已有的字典类型token下载。
#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# @Time : 2020/12/21 11:33
#import wget
import os
import subprocess
from urllib.request import urlopen, Request, URLError, HTTPError
import pdb
import socket
import urllib
from bs4 import BeautifulSoup
import json
import requests
import sys
import io
def main():
token = 'XXXX自己申请的token'
years = [2017]#下载年份
#MYD04_3k
#MYD06_L2
data_types=['MYD04_3K','MYD06_L2']#下载数据类型
outpath='G:\\MODISdownload\\data\\'#本地主目录
for data_type in data_types:
url_head = 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/'+data_type+'/'#网页地址可能要更改
for year in years:
print(year)
start_doy = date2doy(year, 6, 1)#起始年月日
doy = start_doy
end_doy = date2doy(year, 6, 30)#结束年月日
while doy <=end_doy:
url_YD = url_head+ str(year) + '/' + str(doy).zfill(3)
dataoutpath=os.path.join(outpath,data_type,str(year),str(doy).zfill(3))
print(dataoutpath)
if os.path.exists(dataoutpath):
print('path have exist')
else:
os.makedirs(dataoutpath)
print('make dirs')
loaddata(url_YD, token, dataoutpath)
doy=doy+1
print('###FINISH##')
def loaddata(url_YD, token, outpath):
cmd='wget -e robots=off -m -np -R .html,.tmp -nd --cut-dirs=3 "'+url_YD+'" --header "Authorization: Bearer '+token+'" -P '+outpath
print(cmd)
#status = subprocess.call(cmd,shell=True)
try:
status = subprocess.call(cmd,shell=True)
except:
print('error')
def date2doy(year,month,day):
month_leapyear=[31,29,31,30,31,30,31,31,30,31,30,31]
month_notleap= [31,28,31,30,31,30,31,31,30,31,30,31]
doy=0
if month==1:
pass
elif year%4==0 and (year%100!=0 or year%400==0):
for i in range(month-1):
doy+=month_leapyear[i]
else:
for i in range(month-1):
doy+=month_notleap[i]
doy+=day
return int(doy)
def doy2date(year,doy):
month_leapyear=[31,29,31,30,31,30,31,31,30,31,30,31]
month_notleap= [31,28,31,30,31,30,31,31,30,31,30,31]
if year%4==0 and (year%100!=0 or year%400==0):
for i in range(0,12):
if doy>month_leapyear[i]:
doy-=month_leapyear[i]
continue
if doy<=month_leapyear[i]:
month=i+1
day=doy
break
else:
for i in range(0,12):
if doy>month_notleap[i]:
doy-=month_notleap[i]
continue
if doy<=month_notleap[i]:
month=i+1
day=doy
break
return month,day
if __name__=='__main__':
main()
linux需要安装wget。