本次主要借助Python+IDM来实现批量下载ERA5产品《ERA5 monthly averaged data on single levels from 1940 to present》中的“Surface solar radiation downwards“要素。
import cdsapi
import calendar
from subprocess import call
import requests
requests.DEFAULT_RETRIES = 5 # 增加重试连接次数(这个是额外加的要不然会出错“max retries exceeded with url”)
s = requests.session()
s.keep_alive = False # 关闭多余连接
def idmDownloader(task_url, folder_path, file_name):
"""
IDM下载器
:param task_url: 下载任务地址
:param folder_path: 存放文件夹
:param file_name: 文件名
:return:
"""
# IDM安装目录
idm_engine = "E:\\无限试用插件\\Internet Download Manager_v6_38\\IDMan.exe"
# 将任务添加至队列
call([idm_engine, '/d', task_url, '/p', folder_path, '/f', file_name, '/a'])
# 开始任务队列
call([idm_engine, '/s'])
if __name__ == '__main__':
c = cdsapi.Client()
dic = {
'product_type':'monthly_averaged_reanalysis',
'format':'netcdf',
'variable': 'surface_solar_radiation_downwards',
'year':'',
'month':'',
'time': '00:00',
}
# 通过循环批量下载1979年到2020年所有月份数据
for y in range(1995, 2020): # 遍历年
for m in range(1, 13): # 遍历月
day_num = calendar.monthrange(y, m)[1] # 根据年月,获取当月日数
# 将年、月、日更新至字典中
dic['year'] = str(y)
dic['month'] = str(m).zfill(2)
dic['day'] = [str(d).zfill(2) for d in range(1, day_num + 1)]
r = c.retrieve('reanalysis-era5-single-levels-monthly-means', dic, ) # 文件下载器
url = r.location # 获取文件下载地址
path = 'H:\\Graduatu student\\nc' # 存放文件夹
filename = str(y) + str(m).zfill(2) + '.nc' # 文件名
idmDownloader(url, path, filename) # 添加进IDM中下载
参考博文: