爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 91990|回复: 62

[源代码] python下载ncep fnl资料

  [复制链接]

新浪微博达人勋

发表于 2018-6-21 22:43:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Anonymous888 于 2018-7-1 10:40 编辑

使用requests模块下载fnl资料。以下源码只要输入邮箱及密码,更改下载时次及共多少个文件即可。

  • # Author        : dfy
  • # Created       : 21th June 2018
  • #python version  : 3.*
  • import requests
  • import datetime
  • def builtSession():
  •     email = "***"                                        #此处改为注册邮箱
  •     passwd = "***"                                      #此处为登陆密码
  •     loginurl = "https://rda.ucar.edu/cgi-bin/login"
  •     params = {"email":email, "password":passwd, "action":"login"}
  •     sess = requests.session()
  •     sess.post(loginurl,data=params)
  •     return sess
  • def download(sess, dt):
  •     g1 = datetime.datetime(1999,7,30,18)
  •     g2 = datetime.datetime(2007,12,6,12)
  •     if dt >= g2:
  •         suffix = "grib2"
  •     elif dt >= g1 and dt <g2:
  •         suffix = "grib1"
  •     else:
  •         raise StandardError("DateTime excess limit")
  •     url = "http://rda.ucar.edu/data/ds083.2"
  •     folder = "{}/{}/{}.{:0>2d}".format(suffix, dt.year, dt.year, dt.month)
  •     filename = "fnl_{}.{}".format(dt.strftime('%Y%m%d_%H_00'), suffix)
  •     fullurl = "/".join([url, folder, filename])
  •     r = sess.get(fullurl)
  •     with open(filename, "wb") as fw:
  •         fw.write(r.content)
  •     print(filename + " downloaded")
  • if __name__ == '__main__':
  •     print("downloading...")
  •     s = builtSession()
  •     for i in range(12):                                          #共下载多少个时次
  •         startdt = datetime.datetime(2018, 5, 16, 0)  #开始时次
  •         interval = datetime.timedelta(hours = i * 6)
  •         dt =startdt + interval
  •         download(s,dt)
  •     print("download completed!")


   





评分

参与人数 7金钱 +48 贡献 +14 收起 理由
thunderstorm + 2 很给力!
xingbin0804 + 1
AXSL + 5 + 2 赞一个!
王二呦 + 2 很给力!
hekebetter + 5 很给力!
mofangbao + 15 + 5
尽头的尽头 + 20 + 5 赞一个!

查看全部评分

本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2019-10-14 16:46:50 | 显示全部楼层
本帖最后由 hm_others 于 2019-10-16 08:12 编辑

停在downloading。。。。不动,有人遇到这种情况吗?
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2018-7-31 22:49:29 | 显示全部楼层
Anonymous888 发表于 2018-7-31 17:50
这个是权限限制,不能写文件。有两种方式解决:1.以管理员身份登录执行命令;2:切换工作目录到其他盘,执 ...

非常感谢,可以下了,但和前边那位的一样,下下来的都是32k。但我的账号和密码都是对的。也许也是IP的问题。还有没有固定IP下载也会出现都是32k。
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2018-7-2 19:26:33 | 显示全部楼层
hekebetter 发表于 2018-7-2 17:34
为什么我下下来的文件都只有32K

我试了下,可以下载。出现你说的这种问题可能有两点原因:1.账户或者密码失效了;2.IP被封了。
截图.png
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2018-6-22 08:30:24 | 显示全部楼层
感谢分享~~
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2018-6-22 08:32:50 | 显示全部楼层
挺实用的,谢谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-22 10:00:04 | 显示全部楼层
运行的时候40-41行出错了。稍微改了一下可以正常运行。可能是datetime版本不同的原因?总之,多谢楼主分享。

        #interval = datetime.interval(hours = i * 6)
        interval = datetime.timedelta(hours=i * 6)
        dt=startdt+interval
        download(s,dt)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-6-22 11:09:55 | 显示全部楼层
本帖最后由 Anonymous888 于 2018-6-26 19:29 编辑
ofly0127 发表于 2018-6-22 10:00
运行的时候40-41行出错了。稍微改了一下可以正常运行。可能是datetime版本不同的原因?总之,多谢楼主分享 ...

谢谢指出,这个是我的错误。确实是timedelta(),已在源代码中改正了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 14:54:50 | 显示全部楼层
非常棒,谢谢分享。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-25 17:57:43 | 显示全部楼层
感谢楼主分享,这个是要学习一下的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-29 20:10:31 | 显示全部楼层
dt=startdt+interval  没有加上去
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-7-1 09:19:14 来自手机 | 显示全部楼层
没安装requests模块,pip install requests后搞定。确实很好用,感谢分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-7-2 17:34:29 | 显示全部楼层
本帖最后由 hekebetter 于 2018-7-2 17:37 编辑

为什么我下下来的文件都只有32K
捕获.PNG
文件.PNG
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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