爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 40912|回复: 25

[程序设计] 【小白发帖】matlab下载怀俄明大学探空资料下载

[复制链接]

新浪微博达人勋

发表于 2020-7-27 22:43:55 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 trz 于 2022-1-5 15:55 编辑
【新人发帖】才疏学浅,多多指教,如程序有错误或者有改进的地方欢迎各位大佬评论交流!



关于2020年后探空数据爬虫已更新至【第二弹】matlab下载【新】怀俄明大学探空资料下载-编程作图-气象家园_气象人自己的家园 (06climate.com),提前预祝新年快乐,寒假快乐!!!

最近需要下载探空数据与模拟结果比较,嫌点来点去太麻烦就花时间写了一个批量下载matlab脚本,本来是想用python下载的,奈何没用过,又懒得装(懒果然是学习路上的一大敌人)。。。。。
附上心如止水饭团总结的python下载的链接(等级太低无法发链接)
以及怀俄明大学网站(等级太低无法发链接),上面链接搜搜吧 ,容易找。



!!!!!先说脚本存在的一个已经解决的问题!!!!!

由于脚本中爬取网页信息采用的是unlread函数,意思大概是打开一个网页之后读取信息,这样的话就导致如果我打不开这个网页的话,它就会卡住,而且Ctrl+C也无法退出(大量读取这样是必然发生的),只能打开任务管理器打掉这个不成器的孩子。然而就在写帖子的过程我看了一下unread的说明,发现unlread自带计时函数,真是被自己蠢哭了。。。。。因此程序改进为,超过30s(这个受限于网速,脚本头可以自己更改时间)自动重新载入,三次不行就跳过该站点。完美解决这个问题。

此外由于本脚本是按探空次数一次一次爬取探空数据,肯定是比一次读取一个月的要慢,好处是如果需要下载多个站点几天的数据就会比较省空间了。。。(想想谁也不会用脚本只下载几天数据吧,这程序写的有点鸡肋,后期如果我还需要用就再改改吧,写的时候忘了这回事了)

附件中 station.xlsx是我直接爬取的网站中南亚区域的站点(共259个站点),但由于读取的时间内有些没有探空资料,所以部分站点没有给出经纬度,而且中国东北有部分站点不在这个区域内,有兴趣可以自己爬其他区域站点信息。
捕获.PNG
脚本里基本只需要修改前面这写参数,total_station是我站点存放的总文件夹,里面我根据站点编号对应建的有小文件夹,最后写入数据写入txt文件,具体情况看图
捕获1.PNG

捕获3.PNG

捕获2.PNG
程序待改进之处:
(1)大量读取数据最好是一次爬下来一个月,之后再识别分开,会快很多
(2)这个程序可以改写成并行程序parfor,又可以快很多
(3)自学没多久,会带一些习惯性毛病,望指证










sounding.m

4.55 KB, 下载次数: 102, 下载积分: 金钱 -5

station.xlsx

18.71 KB, 下载次数: 120, 下载积分: 金钱 -5

评分

参与人数 3金钱 +22 贡献 +8 收起 理由
小灰灰小灰灰 + 1 太厉害了吧!
海棠aroma + 1
二爷名声在外 + 20 + 8 很给力!

查看全部评分

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

新浪微博达人勋

 楼主| 发表于 2020-9-17 08:46:05 | 显示全部楼层
本帖最后由 trz 于 2020-9-18 09:01 编辑
小其其格 发表于 2020-7-28 19:43
我试了一下,今年大部分时间,国内站点都没有数据了

今年的数据可以通过这个网址查看 http://weather.uwyo.edu/upperair/bufrraob.shtml ,而且图片变成彩色的了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-10-3 15:21:22 | 显示全部楼层
前面贴过代码

sound.py

4.54 KB, 下载次数: 31, 下载积分: 金钱 -5

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

使用道具 举报

新浪微博达人勋

发表于 2020-9-15 16:13:55 | 显示全部楼层
用python 写了一个爬虫程序。http://weather.uwyo.edu/robots.txt显示,robots协议为User-agent: *Disallow: /cgi-bin,如果不遵守协议,存在法律风险。def getHmtlText(url,param):    try:            #r = requests.get('http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR=2020&MONTH=09&FROM=1212&TO=1212&STNM=47600')        r = requests.get(url,params=param)        #print(r.url,r.status_code)        print("开始下载......")        r.raise_for_status()        r.encoding= r.apparent_encoding                      return r.text        except:        return ""def dataClean(rawText,stnm):    try:        #regex =re.compile(r'<PRE>.*</PRE>')        #print(r.text[:500])        elems = '''-----------------------------------------------------------------------------   PRES   HGHT   TEMP   DWPT   RELH   MIXR   DRCT   SKNT   THTA   THTE   THTV    hPa     m      C      C      %    g/kg    deg   knot     K      K      K -----------------------------------------------------------------------------''' #三引号位置        rawText = rawText.replace(elems,'')                   pattern = r'<H2>{}.*</H2>\n<PRE>[0-9\.\- \n]+</PRE>'.format(stnm)                        codes = re.findall(pattern,rawText) #,re.S)        text  = ''        for code in codes:            text = text+code        text = text.replace('<H2>','')        text = text.replace('</H2>','')        text = text.replace('<PRE>\n','')        text = text.replace('</PRE>','')                         return text    except:                print("数据清洗出现错误!")        return ""    def getParam(region,stnm,yr,mon,fromTime,toTime):        param = {'region':'0','TYPE':'1','YEAR':'2','MONTH':'3','FROM':'4','TO':'5','STNM':'6'}     param['region'] = region     param['TYPE'] = unquote('TEXT%3ALIST',encoding='utf-8')        param['YEAR']= '{:0=4d}'.format(yr)     param['MONTH'] = '{:0=2d}'.format(mon)     param['FROM']= fromTime    param['TO'] = toTime    param['STNM']= stnm    return paramdef writeFile(path,content):    fw = open(path,'w')    fw.write(content)    fw.close()def main():    url =" http://weather.uwyo.edu/cgi-bin/sounding"    try:        fo = open("param.csv")        for line in fo:            line = line.replace("\n","")            stnm,region = line.split(",")            for yr in range(2020,2021):                for mon in range(9,10):                    fromTime = '0100'                    toTime = '0412'                                        param = getParam(region,stnm,yr,mon,fromTime,toTime)                                       content = getHmtlText(url,param)                                        content = dataClean(content,param['STNM'])                                      if len(content)>0:                        path = Path("./站号_{}/".format(stnm))                        if not path.is_dir():                            os.mkdir(path)                                                    filename = '{0}月{1}至{2}'.format(mon,fromTime,toTime)                                                 writeFile(os.path.join(path,filename+'.txt'),content)                                                print(filename+'.txt----'+'下载完毕')                                            else:                        print("获取网页错误!")    except:        print("读入参数错误!")
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-27 22:46:46 | 显示全部楼层
哇,发个帖子真的难,最后才发现不让发链接。。。。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-28 09:37:37 | 显示全部楼层
现在怀俄明大学探空资料国内的站点资料为什么没有了?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-28 18:31:24 | 显示全部楼层
小其其格 发表于 2020-7-28 09:37
现在怀俄明大学探空资料国内的站点资料为什么没有了?

国内站点只是在地图上不显示了,直接输入站点编号可以下载数据,中国大部分的探空站点编号和经纬度,station.xlsx里面有
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-28 18:55:16 | 显示全部楼层
这样呀,厉害的!!!我还以为没有了呢!!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-28 19:43:04 | 显示全部楼层
我试了一下,今年大部分时间,国内站点都没有数据了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-28 23:15:00 | 显示全部楼层
小其其格 发表于 2020-7-28 19:43
我试了一下,今年大部分时间,国内站点都没有数据了

好像是的,我看今年一月份的数据还能下,三月的下不了。。。。之前用的一直是19年前的数据,没有注意到
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-9-10 08:42:34 | 显示全部楼层
感谢楼主 的分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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