下載wyoming大學(xué)的探空數(shù)據(jù)

水平有限,歡迎指正交流,共同進步!

俄懷明大學(xué)將全球探空站的數(shù)據(jù)共享使用,并通過計算了很多的變量指數(shù).非常有用,近期有這方面的需求,暫時寫了一段未經(jīng)優(yōu)化的代碼下載.
如果要大量下載可以嘗試代理池1或者代理池2的方式,通過代理和各種規(guī)避反扒措施來抓取.



import os
import datetime
import requests
from io import StringIO
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
import calendar
import random
# url = http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR=2018&MONTH=07&FROM=0312&TO=0312&STNM=72558
# http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR=2018&MONTH=07&FROM=0312&TO=0312&STNM=54511

USER_AGENTS = ["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)", "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
               "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)", ]


def main(start_date, end_date, sta_id=54511):
    pass
    # now_date = datetime.date(year, month, 1)
    allmonths = pd.date_range(start_date, end_date, freq='m')
    # print(allmonths)
    for idate, vdate in enumerate(allmonths.astype(object)):
        handle_html(vdate.year, vdate.month)
        print('搞定這個時間了:--->>>', vdate)


def set_url(date, sta_id):
    dayNums = calendar.monthrange(date.year, date.month)[1]
    return 'http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR={year}&MONTH={month:4s}&FROM=0100&TO={day_end}12&STNM={sta_id}'.format(
        year=date.year,
        month=str(date.month).zfill(2),
        day_end=dayNums,
        sta_id=str(sta_id)
    )


def handle_html(year, month, sta_id=54511):
    now_date = datetime.date(year, month, 1)
    urls = set_url(now_date, sta_id)
    header = {'User-Agent': random.choice(USER_AGENTS)}
    # print(random.choice(USER_AGENTS))
    content = requests.get(urls, headers=header).content
    # print(content)
    soup_html(content)


def soup_html(html_page):
    soup = BeautifulSoup(html_page)
    headers_1 = soup.find_all('h2')
    details_data = soup.find_all('pre')
    d1s = details_data[::2]
    d2s = details_data[1::2]
    headers_2 = soup.find_all('h3')
    for iheader, vheader in enumerate(headers_1):
        convert_one_time(vheader, d1s[iheader], d2s[iheader])


def convert_one_time(h1,  d1, d2, filedir=None):
    h1_list = h1.string.split()
    obser_time = pd.to_datetime(
        ' '.join([i for i in h1_list[-4:]]), format='%HZ %d %b %Y')
    if filedir is None:
        filedir = os.path.join(homedir, 'data', obser_time.strftime('%Y%m'))
        if not os.path.exists(filedir):
            try:
                os.makedirs(filedir)
            except:
                pass
    # h1 = '_'.join([i for i in h1.string.split()])
    filename1 = 'sounding_details_{}_{}.csv'.format(
        h1_list[1], obser_time.strftime('%Y%m%d%H'))
    filename2 = 'sounding_indices_{}_{}.csv'.format(
        h1_list[1], obser_time.strftime('%Y%m%d%H'))

    detail_data = pd.read_fwf(
        StringIO(d1.string.replace('-', '')),
        widths=[7 for _ in range(11)],  skiprows=[1, 4]
    )
    detail_data.columns = [
        '{}_{}'.format(i, j) for i, j in zip(detail_data.iloc[0], detail_data.iloc[1])
    ]
    detail_data.drop([0, 1], axis=0, inplace=True)
    detail_data.to_csv(os.path.join(filedir, filename1), index=False)

    index_data = pd.read_csv(
        StringIO(d2.string), delimiter=':', names=['variable', 'value']).T
    
    index_data.columns = index_data.iloc[0]
    index_data.drop(['variable'], axis=0, inplace=True)
    index_data.to_csv(os.path.join(filedir, filename2), index=False)

if __name__ == '__main__':
    homedir = os.path.dirname(os.path.realpath(__file__))
    print(homedir)
    datadir = os.path.join(homedir, 'data')
    if not os.path.exists(datadir):
        try:
            os.makedirs(datadir)
        except:
            pass
    # main('2000-01-01', '2018-07-01')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末生巡,一起剝皮案震驚了整個濱河市璃俗,隨后出現(xiàn)的幾起案子冕臭,更是在濱河造成了極大的恐慌滚局,老刑警劉巖工猜,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摊趾,死亡現(xiàn)場離奇詭異币狠,居然都是意外死亡,警方通過查閱死者的電腦和手機砾层,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門漩绵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肛炮,你說我怎么就攤上這事止吐。” “怎么了侨糟?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵碍扔,是天一觀的道長。 經(jīng)常有香客問我秕重,道長不同,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任溶耘,我火速辦了婚禮二拐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凳兵。我一直安慰自己百新,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布留荔。 她就那樣靜靜地躺著吟孙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪聚蝶。 梳的紋絲不亂的頭發(fā)上杰妓,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音碘勉,去河邊找鬼巷挥。 笑死,一個胖子當(dāng)著我的面吹牛验靡,可吹牛的內(nèi)容都是我干的倍宾。 我是一名探鬼主播雏节,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼高职!你這毒婦竟也來了钩乍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤怔锌,失蹤者是張志新(化名)和其女友劉穎寥粹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埃元,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡涝涤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岛杀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阔拳。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖类嗤,靈堂內(nèi)的尸體忽然破棺而出糊肠,到底是詐尸還是另有隱情,我是刑警寧澤土浸,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布罪针,位于F島的核電站,受9級特大地震影響黄伊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜派殷,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一还最、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毡惜,春花似錦拓轻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帕膜,卻和暖如春枣氧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垮刹。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工达吞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荒典。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓酪劫,卻偏偏與公主長得像吞鸭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子覆糟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評論 25 707
  • 早加餐:棉花糖午加餐:棒子刻剥,三文魚飯團 參考目標: 1份肉2份豆制品3份“新鮮”水果4份谷物/薯5份蔬菜,深綠色葉...
    靜趣_兒童心理師閱讀 514評論 0 0
  • #版權(quán)歸作者所有滩字,任何形式轉(zhuǎn)載請聯(lián)系作者造虏。 大學(xué)開始之初锤岸,帶著激動興奮的心情來到了我的學(xué)校鳍悠。盡管地處偏僻,但它依舊...
    林葉A閱讀 227評論 0 5
  • 我恰好17歲撵术,正好情竇初開的年紀,可能是太過于懵懂了吧话瞧,我也很懵懵懂懂嫩与,就像白色梔子花搖曳著,隱隱約約交排,影影綽...
    4642c4b63201閱讀 629評論 0 2