爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 215231|回复: 543

[其他] 利用python脚本,批量自动下载欧洲中心的气象数据

  [复制链接]

新浪微博达人勋

发表于 2014-5-14 16:42:00 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 leeol 于 2017-10-27 18:22 编辑

更新:近日我在下数据时发现EC微调了下载方法,具体可见官方网址:https://software.ecmwf.int/wiki/display/WEBAPI/Access+ECMWF+Public+Datasets

##################################################################
      欧洲中期天气预报中心ECMWF,提供了多种再分析和预报资料,现在已广泛的应用于平时的气象气候研究中,但是由于其精度高,变量全,时次多的特点,在下载时候较为麻烦。
      之前在本版有过关于利用网页可视化接口下载的方法(欧洲气象中心资料(ERA-interim)下载方法简介 http://bbs.06climate.com/forum.php?mod=viewthread&tid=13288&extra=page%3D2)

    但是从网页上下载有一个比较大的缺点,就是fields数量有限制(最大不超过20000个),如图:

filed.jpg

这样的话,如果要下载多年多日多时次多预报时刻多层的话,就不得不分别多次在下载网页进行手动的选择,并耐心等待数据文件的生成,才能下载。

       近日,经同学推荐和帮助,学习了可以利用python脚本通过ecmwf提供的api来下载era的数据(https://software.ecmwf.int/wiki/ ... ta+servers+in+batch),这个在论坛的python板块有朋友提过,但未进行说明。在此,我来简介下。
      
      step1: ptython的下载和安装:
在这个网页 https://www.python.org/download/ 选择对应32位还是64位的系统下载,这里建议下载Python 2.7.6,然后安装好。


     step2:ptython脚本下载和调试:
(1)在前面提到的batch access网页上 https://software.ecmwf.int/wiki/display/WEBAPI/Accessing+ECMWF+data+servers+in+batch 往下拖动,会看到
down.jpg

下载这个ecmwf-api-client-python.tgz,并解压。解压后,对子文件夹ecmwfapi的api.py右键,选择Edit with IDLE
1111.jpg

找到这样一行:
    KEY = None
    URL = None
    EMAIL = None
这里需要根据我们之前注册过的利用网页下载的账号进行修改(没有账号?那就注册一个呗),key的获取地址:https://api.ecmwf.int/v1/key/),根据这个网页提供的key,e-mail,url进行修改,这里注意,URL = "https://api.ecmwf.int/v1",由于era验证的升级,这个网页上提供的http后面没有s,我们需要自己加一下,修改成如下图这样就可以啦。
222.jpg


(2)各个资料集下载权限的获取:
https://software.ecmwf.int/wiki/display/WEBAPI/Accessing+ECMWF+data+servers+in+batch 上找到下面这个:
QQ图片20140512141123.jpg

你要下载哪个资料集,就点击哪个的general,点进去accpet它的说明就行。

(3)下载脚本的运行试验:
在刚才解压的ecmwf-api-client-python文件夹下面有一个example.py文件,同样,我们右键Edit with IDLE打开,在菜单栏选择run,点击run module运行,
333.jpg

运行窗口如下:
444.jpg

      如果你按照步骤正确的来的话,就会出现上图的成功运行结果,在ecmwf-api-client-python文件夹下也会成功出现一个data.grib的数据文件。我在图上进行标注,你也可以利用所生成的数据文件的绝对地址复制到下载工具里面下载(如果你也跟我一样用的是某校校园网,下载欧洲中心速度很慢的话

     step3:修改下载脚本,下载自己需求的数据
  前面的内容都属于基本准备工作,这里开始结合个人需求进行选择和下载,这里我结合一个下载Era_interim的,从1979到2013年、逐日、17层、一日四次的U风资料nc格式文件的例子来说明。

脚本内容如下(中文是说明,不是代码):
#!/usr/bin/env python
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()
data=["1979","1980","1981","1982","1983"]

for idata in range(len(data)):这里写了一个循环,根据data里面的年份循环

   server.retrieve({
          'dataset' : "interim",这里是数据集名称
          'step'    : "0",这里是预报时长,
          #'number'  : "all",这是指的是集合预报,集合全部(all)
          'levtype' : "pl",这里是层次类别,高空多层是pl,地面单层是sl
          'date'    : data[idata]+"0101"+"/to/"+data[idata]+"1231",这里是下载时间段
          'time'    : "00/06/12/18",这里是下载时次
          #'origin'  : "all",这里选择的是哪几个个预报中心
          #'type'    : "pf",这里选择的是集合预报(pf)还是控制预报(fc)
          'param'   : "u",这里是下载变量名
          'levelist': "1000/925/850/700/600/500/400/300/250/200/150/100/70/50/30/20/10",这里是下载层次
          'area'    : "90/0/0/180",这里是下载区域范围,按照 90N -180W -90S 180E的范围填写
          'grid'    : "2/2",这是是格点精度
          'format'  :'netcdf',这里是下载格式,不写的话是下载grib文件的
          'target'  : "D:/era_down/u/u.day."+data[idata]+".nc"这里是下载路径和文件名,netcdf文件自然后缀名是nc
          })

#自己写的脚本文件注意要放在ecmwf-api-client-python的文件夹下面。
#关于变量名,这里写的是对应下载数据文件里面的变量名,这里是tigge里面的变量名说明页 http://tigge.ecmwf.int/tigge/d/show_archive/table=parameters/ ,其他的我目前也没有找到,实在不知道就先用网页随便下载一个小一点的打开查看下,{:soso_e153:}
########################################################################################


       这里,我发此帖也是想抛砖引玉,因为我对于这样利用api+脚本方式下载资料也是第一次成功尝试,在近日的下载过程中也发现了诸如脚本下载速度比网页的慢(所以利用脚本生成的绝对地址利用下载工具下),由于网络不稳定造成的脚本运行报错,不知道如何利用脚本下载逐月资料(这个好像有点鸡肋,因为逐月资料fields少,直接在网页下就好了)等问题,也希望大家能够帮我补充和解答。

下面我把教程中的一些相关文件下载放在这里:
python-2.7.6.amd64.msi (15.9 MB, 下载次数: 824)

点评

帮助很大,谢谢  发表于 2018-6-28 10:38

评分

参与人数 5金钱 +55 贡献 +20 收起 理由
lcrystal + 1 很给力!
岂曰无衣 + 2 很给力!
west4500 + 2 很给力!
mofangbao + 20 + 10
kongfeng0824 + 30 + 10 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-28 19:31:01 | 显示全部楼层
楼主,没有找到这一行啊   
    KEY = None
    URL = None
    EMAIL = None
是不是url=None, key=None, email=None, verbose=False,  类似这样啊?
QQ截图20160828192954.png
密码修改失败请联系微信:mofangbao
回复 支持 9 反对 0

使用道具 举报

新浪微博达人勋

发表于 2017-11-9 23:17:09 | 显示全部楼层
按照楼主的方式,没有找到key none 这一行,我就把key 等信息加到api.py的某一行,试了很多遍还是不行,总是提示.ecmwfapirc文件找不到,后面找到这个http://blog.csdn.net/cronousgt/article/details/78322369 方法可以新建.ecmwfapirc,把这个文件放在%USERPROFILE%\目录下,即可。亲测有用。
楼主给的ecmwf-api-client-python.tgz 中的example 我这边用有问题,换成ec官网的例子就完全ok,具体我也不知道什么原因。
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-7-13 16:12:14 | 显示全部楼层
楼主,您好,我在做的过程中出了点错误,麻烦您帮我看看,看错在哪里,谢谢了,错误如下:
解压的ecmwf-api-client-python,右键Edit with IDLE打开,在菜单栏选择run,点击run module运行
11.jpg
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-17 12:00:38 | 显示全部楼层
run了之后出现SyntaxError:invalid syntax是神马情况0 0?
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2018-1-30 22:39:30 | 显示全部楼层
本帖最后由 麦田守望者 于 2018-1-30 22:48 编辑
寒冷的south 发表于 2018-1-29 15:59
我的电脑里的ecmwfapi下的api.py更改后不能保存。想问你是怎么操作的?

具体步骤参考论坛里这个帖子,介绍得很仔细,按步骤操作就行
http://bbs.06climate.com/forum.php?mod=viewthread&tid=58547
引用原帖子里部分内容:


有了帐号密码后登录https://apps.ecmwf.int/auth/login/
登录后打开https://api.ecmwf.int/v1/key/
复制以下内容:
{
    "url" : "https://api.ecmwf.int/v1",
     "key": "XXXXXXXXXXXXXXX"
     "email":"john.smith@example.com"
}

新建一个名为‘.ecmwfapirc.txt’的文本文档(.txt不显示的,请调至显示,不会的百度),别少了前面的点,打开文档把复制的key内容(就是上图的内容)粘贴进去,保存。重名命文档,txt前在加一个点,变成‘.ecmwfapirc..txt’,最后把‘.txt’删除,提示不可用,请点‘是’,这样点文件‘.ecmwfapirc’就生成了。最后把点文件复制到我的文档下面,win10就是桌面用户名文档下面,里面包含下载、音乐、桌面等文件夹的(搞不清楚自行百度)。

补充:API key是有有效期的,有效期1年,1年后要重新激活
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-1-26 12:55:59 | 显示全部楼层
python数据爬虫确实是个好东西 很多软件都能实现这些功能 例如linux的wget perl也可以,当你在CDA那个网站下载数据时,它们会给你几种代码,让你自动下载,而不必自己编译。。可学之
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-7-17 21:27:51 | 显示全部楼层
维克多·蓝晶 发表于 2014-7-17 14:17
楼主好,我遇到了同样的问题,也按照指导做了,但实际上KEY没变,还是HTTP Error 403,不知道该怎样解决

检查下你的“dataset”的名称与你要下载的数据的名称是否一致。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-15 09:05:02 来自手机 | 显示全部楼层
cool.受激励下决心学习python!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 09:41:09 | 显示全部楼层
看来python是个好软件呀!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 09:47:34 | 显示全部楼层
{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-5-15 10:58:14 | 显示全部楼层
两个字 威武
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 13:22:49 | 显示全部楼层
学习了,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 16:02:56 | 显示全部楼层
很有用哦~~~
各个资料集下载权限的获取时用户名密码要重新申请吗?怎么申请呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-15 16:59:35 | 显示全部楼层
xiaozhu_happy 发表于 2014-5-15 16:02
很有用哦~~~
各个资料集下载权限的获取时用户名密码要重新申请吗?怎么申请呢?

不用,把一个账户在各个资料集的申明里面accpet一下就可以了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 20:30:21 | 显示全部楼层
楼主nb!   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-15 21:56:27 | 显示全部楼层
这个是利用ec为数据下载方便提供的python脚本啊 没想到ec这么贴心 航哥霸气v5
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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