爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8366|回复: 6

[其他] ucar fnl等数据的批量下载exe(可续传)

[复制链接]

新浪微博达人勋

发表于 2019-3-2 22:28:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 sam_doggy 于 2019-4-15 19:50 编辑

2019.4.15更新

把程序打包为exe文件,可以不需要下载python直接运行
由于ucar提供了.py形式的代码,所以并未费事爬取,而是希望使用者从提供的.py代码中复制某些变量


需要注意的是,希望复制的变量格式为图片所展示的格式,filelist不要有回车换行
等下次有空可以把从键盘读入数据的形式改为直接从文本正则查找

#################第一版


分享一个对ucar网站的python requeset 下载的小改动,只有完全不会用request库的人才有参考价值
主要加上
1:断点续传功能
2. 跳过已经下载完成的部分,每次只需重新运行该程序

改动仅仅两处

完全不会python 的:
1.百度下载python3,
2.配置环境变量后直接在cmd中运行,
3.运行方式为输入“python 需要运行的程序地址”

  1. #!/usr/bin/env python
  2. #################################################################
  3. # Python Script to retrieve 2 online Data files of 'ds502.0',
  4. # total 88.47M. This script uses 'requests' to download data.
  5. #
  6. # Highlight this script by Select All, Copy and Paste it into a file;
  7. # make the file executable and run it on command line.
  8. #
  9. # You need pass in your password as a parameter to execute
  10. # this script; or you can set an environment variable RDAPSWD
  11. # if your Operating System supports it.
  12. #
  13. # Contact tcram@ucar.edu (Thomas Cram) for further assistance.
  14. #################################################################


  15. import sys, os
  16. import requests

  17. def check_file_status(filepath, filesize):
  18.     sys.stdout.write('\r')
  19.     sys.stdout.flush()
  20.     size = int(os.stat(filepath).st_size)
  21.     percent_complete = (size/filesize)*100
  22.     sys.stdout.write('%.3f %s' % (percent_complete, '% Completed'))
  23.     sys.stdout.flush()

  24. # Try to get password
  25. if len(sys.argv) < 2 and not 'RDAPSWD' in os.environ:
  26.     try:
  27.         import getpass
  28.         input = getpass.getpass
  29.     except:
  30.         try:
  31.             input = raw_input
  32.         except:
  33.             pass
  34.     pswd = input('Password: ')
  35. else:
  36.     try:
  37.         pswd = sys.argv[1]
  38.     except:
  39.         pswd = os.environ['RDAPSWD']

  40. url = 'https://rda.ucar.edu/cgi-bin/login'
  41. values = {'email' : '你的邮箱', 'passwd' : pswd, 'action' : 'login'}
  42. #此处填自己邮箱
  43. ret = requests.post(url,data=values)
  44. if ret.status_code != 200:
  45.     print('Bad Authentication')
  46.     print(ret.text)
  47.     exit(1)
  48. dspath = 'http://rda.ucar.edu/data/ds502.0/'
  49. filelist = [
  50. 'big_endian/2003/20030101_3hr-025deg_cpc+comb',
  51. 'big_endian/2003/20030102_3hr-025deg_cpc+comb']
  52. for file in filelist:
  53.     filename=dspath+file
  54.     file_base = os.path.basename(file)
  55.     print('Downloading',file_base)
  56. #####每次加这部分,在同样位置即可##################
  57.     # 第一次请求是为了得到文件总大小
  58.     r1 = requests.get(filename, cookies = ret.cookies, allow_redirects=True, stream=True)
  59.     total_size = int(r1.headers['Content-Length'])

  60.     # 先看看本地文件下载了多少
  61.     if os.path.exists(filename):
  62.         temp_size = os.path.getsize(filename)
  63.         # 本地已经下载的文件大小
  64.     else:
  65.         temp_size = 0
  66.     # 显示一下下载了多少
  67.     if temp_size==total_size:
  68.         continue
  69.     # 核心部分,这个是请求下载时,从本地文件已经下载过的后面下载
  70.     headers = {'Range': 'bytes=%d-' % temp_size}
  71.     # 重新请求网址,加入新的请求头的
  72. ################################################

  73.     req = requests.get(filename, cookies = ret.cookies, allow_redirects=True, stream=True,headers=headers)
  74.     filesize = int(req.headers['Content-length'])
  75.     with open(file_base, 'ab') as outfile:
  76. #wb每次要改成ab
  77.         chunk_size=1048576
  78.         for chunk in req.iter_content(chunk_size=chunk_size):
  79.             outfile.write(chunk)
  80.             if chunk_size < filesize:
  81.                 check_file_status(file_base, filesize)
  82.     check_file_status(file_base, filesize)
  83.     print()
  84. #我改过的文件,标注了我加的内容,每次重下就直接运行就好,会自动跳过重复的。你要改下邮箱改成自己的。
复制代码



picture.png

ncdownload.rar

17.79 MB, 下载次数: 120, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2019-3-18 10:10:01 | 显示全部楼层
学习一下,非常感谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-18 11:26:59 | 显示全部楼层
学习一下,非常感谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-7-30 10:09:57 来自手机 | 显示全部楼层
请问楼主能实现批量下载么?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-27 10:54:33 | 显示全部楼层
楼主大大,我要下载ucar的 “        NCAR CESM Global Bias-Corrected CMIP5 Output to Support WRF/MPAS Research”这个数据,然后修改了那个dspath和filelist,但是总是下载完的文件大小为0k。这是为什么呀?

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-10 09:16:06 | 显示全部楼层
楼主你好,最近软件无法下载(自动回复:请不要使用迅雷等下载工具,点我查看下载帮助),之前一直可以使用,请问是有什么问题么?
错误代码一闪就过,看都不看清,无法截图。。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-8 10:59:27 | 显示全部楼层
感谢分享!学习一下~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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