目录

  • 0 说明
  • 1 下载Siphon
  • 2 修改siphon中的数据网址
  • 3 批量下载数据
  • 4 结果展示

0 说明

已有很多作者发布了有关下载怀俄明大学探空数据的博客,但使用python的较少。且近期发现网站上中国地区的站点都消失了。发邮件询问了一下,原来是中国提供的数据格式更改成了BURF,他们在一个新的网站上提供这些数据:http://weather.uwyo.edu/upperair/bufrraob.shtml。新的网站上可以看到中国地区的站点。

下面开始正题

1 下载Siphon

siphon是pyhton语言写的一个工具包,可以用来下载预报数据、再分析数据以及怀俄明的探空数据。我们在其基础上修改代码以适配新网站的格式。可以采用两种方式下载:

  1. 手动下载,然后手动添加到项目文件夹中
    siphon下载地址:https://unidata.github.io/siphon/latest/examples/upperair/Wyoming_Request.html#sphx-glr-examples-upperair-wyoming-request-py

  2. 通过Pycharm等导入第三方包来下载,此方法更加便捷,推荐使用
    具体直接搜索siphon即可下载

2 修改siphon中的数据网址

因为siphon包还未更新至新的数据网站,仍然访问的是旧网站,就会下载不到任何数据。所以需要修改其中的部分代码。

  • (1) 防止访问太过频繁而被网站封禁,添加多个IP地址和代理 (可以跳过此步)
    打开siphon中的http_util.py文件,找到create_session(self)函数修改为以下内容:
    def create_session(self):"""Create a new HTTP session with our user-agent set.Returns-------session : requests.SessionThe created sessionSee Also--------urlopen, set_session_options"""my_headers = ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14","Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11','Opera/9.25 (Windows NT 5.1; U; en)','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)','Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)','Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12','Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7","Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "]proxy_list = ['http://121.43.190.89:3128','http://221.224.136.211:35101','http://103.216.103.25:80','http://175.10.223.95:8060','http://121.43.190.89:3128','http://222.112.240.167:80''http://218.75.102.198:8000''http://23.254.161.181:80']# print(random.choice(proxy_list))ret = requests.Session()ret.headers['User-Agent'] = random.choice(my_headers)ret.proxies.update({"http:":random.choice(proxy_list)})# print(ret.headers['User-Agent'])# print(ret.proxies)for k, v in self.options.items():setattr(ret, k, v)return ret
  • (2) 修改下载的网址
    找到函数__init__(self):,将其中的super语句修改为:
super(WyomingUpperAir, self).__init__('http://weather.uwyo.edu/cgi-bin/bufrraob.py')

找到函数_get_data_raw(self, time, site_id),将其中的path修改为:

path = ('?src=bufr&datetime={time:%Y-%m-%d}%20{time:%H}:00:00&id={stid}&type=TEXT:LIST').format(time=time, stid=site_id)
#某站点某天数据网址示例 'http://weather.uwyo.edu/cgi-bin/bufrraob.py?src=bufr&datetime=2021-01-01%2012:00:00&id=54511&type=TEXT:LIST'
  • (3) 修改数据提取代码
    由于新网站结构格式与原网站不同,比如新网站不再有每个站点的经纬度信息等。所以我们需要修改代码以匹配新网站,从中提取出我们需要的信息。
    找到函数_get_data(self, time, site_id),将其修改为:
    def _get_data(self, time, site_id):r"""Download and parse upper air observations from an online archive.Parameters----------time : datetimeThe date and time of the desired observation.site_id : strThe three letter ICAO identifier of the station for which data should bedownloaded.Returns-------:class:`pandas.DataFrame` containing the data"""# 天气数据爬虫文本提取raw_data = self._get_data_raw(time, site_id)soup = BeautifulSoup(raw_data, 'html.parser')tabular_data = StringIO(soup.find_all('pre')[0].contents[0])print(soup.find_all('pre')[0].contents[0])col_names = ['pressure', 'height', 'temperature', 'dewpoint', 'direction', 'speed']df = pd.read_fwf(tabular_data, skiprows=5, sep=' ',infer_nrows=1000 , usecols=[0, 1, 2, 3, 6, 7], names=col_names)print(df)df['u_wind'], df['v_wind'] = get_wind_components(df['speed'],np.deg2rad(df['direction']))# Drop any rows with all NaN values for T, Td, windsdf = df.dropna(subset=('temperature', 'dewpoint', 'direction', 'speed','u_wind', 'v_wind'), how='all').reset_index(drop=True)# Add unit dictionarydf.units = {'pressure': 'hPa','height': 'meter','temperature': 'degC','dewpoint': 'degC','direction': 'degrees','speed': 'm/s','u_wind': 'm/s','v_wind': 'm/s',}return df

3 批量下载数据

然后通过下面的代码就可以下载俄怀明的探空数据了:

import pandas as pdimport datetimeimport timeimport osfrom metpy.units import unitsfrom siphon.simplewebservice.wyoming import WyomingUpperAir# 新建文件夹函数,便于分站点存储数据
def mkdir(path):folder = os.path.exists(path)if not folder:  # 判断是否存在文件夹如果不存在则创建为文件夹os.makedirs(path)  # makedirs 创建文件时如果路径不存在会创建这个路径else:pass# 设置下载时段(这里是UTC时刻)
start = datetime.datetime(2020, 1, 1, 0)
end = datetime.datetime(2020, 1, 1, 0)
datelist = []
while start<=end:datelist.append(start)start+=datetime.timedelta(hours=12)datelist_s=[]
# 选择下载站点(以上海宝山站为例)
stationlist = ['57494']# 可通过外部文件批量导入站点编号
# sta = pd.read_csv("station.csv",encoding = 'gb2312',dtype={"id": str})
# stationlist = sta['id']nodata=[]
data_missing=[]
# 批量下载
for station in stationlist:datelist_s=datelist.copy()for date in datelist_s:try:df = WyomingUpperAir.request_data(date, station)mkdir('D:/RS_data/'+station)    df.to_csv('D:/RS_data/'+station+'/'+station+'_'+date.strftime('%Y%m%d%H')+'.csv',index=False)print(station+date.strftime('%Y%m%d_%H')+'下载成功')except Exception as e:print('错误类型是',e.__class__.__name__)print('错误明细是',e)print(station+date.strftime('%Y%m%d_%H')+'下载失败,原因如下:')if e.__class__.__name__=="IndexError":#加入无数据队列print('No data available for {time:%Y-%m-%d %HZ} ''for station {stid}.'.format(time=date, stid=station))nodata.append(station+'_'+date.strftime('%Y%m%d%H'))elif e.__class__.__name__=="TypeError":print('Error data type in web page')nodata.append(station + '_' + date.strftime('%Y%m%d%H'))elif e.__class__.__name__=="KeyError":print('Missing data in web page')data_missing.append(station + '_' + date.strftime('%Y%m%d%H'))# 其他需要忽略下载的错误可以继续往下加else:#把下载失败日期加入到下载队列末端重新下载datelist_s.append((date))# 将无数据的站点及日期写入文件print("无数据提供的站点及日期:")print(nodata)f = open("nodata_12.txt", "w")for line in nodata:f.write(line + '\n')f.close()# 将数据列缺失的站点及日期写入文件print("数据列存在缺失的站点和日期:")print(data_missing)f = open("data_missing_12.txt", "w")for line in data_missing:f.write(line + '\n')f.close()

4 结果展示

  • 各站点数据文件夹:
  • 某站点下载的数据:
    某站点某天探空数据展示:

Python下载Wyoming怀俄明大学探空数据(数据网址更新)相关推荐

  1. 在怀俄明大学天气数据网站下载探空数据详细步骤

    一.登录网址 怀俄明大学天气数据网站:weather.uwyo.edu/wyoming/ 二.点击"Upper Air" 图1 三.在打开"Upper Air" ...

  2. Matlab 从怀俄明大学上爬取探空数据

    function sounding %设置爬取时间  49行可以选取早八晚八,默认是都下载 start_year       =2019     ; start_month      =06     ...

  3. Python 抓取软科中国大学排名首页数据

    文章目录 利用requests.BeautifulSoup.xlwings库抓取软科中国大学排名首页数据 (1)软科中国大学排名 (2)调用requests模块中get方法,get方法包括header ...

  4. Python:下载zip文件并解压zip文件数据

    以下载百度地图官方给出的中国各大城市中心经纬度压缩文件( https://mapopen-website-wiki.bj.bcebos.com/static_zip/BaiduMap_cityCent ...

  5. 谁说菜鸟不会数据分析python下载_《谁说菜鸟不会数据分..._30天学会Pytho_职场_小打卡...

    第二连马志远 一:上午学习收获: 认清现在局势方向. 曾经的生活,以及教育培训局面是传递速度挺慢的. 我们所处的4g时代,教育培训行业面对获客引流,教育教学,运行服务,都是保持紧跟节奏,现如今,5G时 ...

  6. aaynctask控制多个下载进度_使用 Python 下载的 11 种姿势,一种比一种高级

    点击上方"Python编程时光",选择"加为星标"第一时间关注Python技术干货! 原文链接:http://dwz.date/cQjK 在本教程中,你将学习如 ...

  7. python下载安装教程电脑版,python下载好了怎么使用

    python下载安装教程 python下载安装教程:自定义安装目录,点击install进行安装,打开cmd窗口,输入python,显示python的版本,安装成功. Python语言更适合初学者,Py ...

  8. Python下载M3U8加密视频示例

    大家好,我是小小明. 最近看到几个视频网站的地址依然是m3u8格式,不禁有了使用python进行下载的想法,虽然下载m3u8格式视频的工具很多,但如果我们自行编码就能应对更多的情况. 关于m3u8的基 ...

  9. python仿真程序,用Python下载PHET互动仿真程序

    用Python下载PHET互动仿真程序 PhET是什么呢? PhET是一款开放.免费的互动仿真程序.由诺贝尔物理学奖获得者卡尔•威曼于2002年发起,在科罗拉多大学制作.运行.旨在通过自由互动仿真程序 ...

  10. 美国怀俄明州对加密货币免征财产税

    点击上方 "蓝色字" 可关注我们! 暴走时评: 虽然有些国家或地区的政府正在尝试限制或阻止加密货币的使用,但仍有许多政府在采取措施确保其管辖范围内的居民能够自由使用这种革命性技术. ...

最新文章

  1. React Namespaced Components
  2. Flask框架从入门到精通之转换器(四)
  3. 内核虚拟化技术——LXC初体验
  4. JS之字符串连接方法join
  5. 线性代数的本质笔记-更新ing
  6. 函数的作用域以及预编译
  7. 高并发用redis还是mysql_高并发架构系列:Redis缓存和MySQL数据一致性方案详解
  8. python递归函数入门教程_Python递归函数
  9. 设计模式解密(9)- 装饰者模式
  10. Excel的Range对象(C#)
  11. Bill Gates推荐,人工智能必读的三本书 -《终极算法》,《超级智能》和《终极发明》zz
  12. java中特殊符号_java中的特殊字符集合
  13. SaleSmartly注册登录教程
  14. 不为环境所动就能成功——职场人士寓言(3)
  15. 使用Ambari快速部署Hadoop大数据环境
  16. python自然语言处理—Teacher Forcing
  17. Linux虚拟用户怎么建立,linux下ftp虚拟用户的创建方法
  18. 2015年度中国智能路由器市场监测报告
  19. tcpmux TCP 端口服务多路复用
  20. GDI基础(1):绘制线条和图形

热门文章

  1. 分享 :理解和管理社交媒体算法的4个想法
  2. java 加密解密,编码解码工具类
  3. 分享15款堪称神器却鲜为人知的软件和网站
  4. 想在抖音上卖衣服不知道怎么入手,抖音小店改销量技术
  5. 宿舍物联网门锁系统之个人小程序注册
  6. Numerical Computing with MaTLAB(matlab数值计算)书中的工具箱 ncm下载以及课本答案和程序下载
  7. 浏览器支持H.265解码总结
  8. 蓝桥杯嵌入式备赛手册
  9. Word导出带目录的PDF
  10. 典型关联分析(CCA)原理总结