2022年1月15日 星期六

【python抓爬仔】~~簡單抓取呈現「氣象資料開放平台」資訊

 這篇很簡短~~主要就是紀錄一下如何使用設計完善、方便的「氣象資料開放平台」。

順道整理與介紹一下json的操作及迴圈操作概念。主要還是因為氣象資料實用、常見~相當適合作為練習之用。

這篇python程式內容很簡要,最主要的準備工作其實是:要先去完成「氣象資料開放平台」的會員註冊,並找到所需要的氣象資料API。這樣工作就差不多做完了~~剩下的就是Python的語法操作練習與迴圈概念。

好囉~~先看「氣象資料開放平台」這真是個設計得很完善的開放資料平台,先給個讚👍

程序上~~就是註冊→獲取使用者授權碼→尋找所需資料→設定資料→取得呼叫網址

幾個步驟~~本篇就以如何取得「三十六小時天氣與報資訊」為例進行操作。(平台操作內容就請自行參考下圖進行練習~~就是網站操作而已,就不多做說明了~~打字好累😓)








完成上述操作,最主要就是要獲取「Request URL」

得到Request URL後,對Python而言,獲取資料就是二、三行的事情了!

好了~~程式碼🐎上...........

import requests

api_link = "https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=使用者授權碼&locationName=%E6%96%B0%E5%8C%97%E5%B8%82"
re = requests.get(api_link).json()

# print(re)  # 觀看獲取的原始資料
# print(re["records"])   # 試著讀取json資料1
# print(re["records"]["location"][0])  # # 試著讀取json資料2
 
tlist = ["天氣狀況:", "降雨機率:", "最低溫:", "舒適度:", "最高溫:" ]  # 設定各項氣象資料對應名稱list
info_title = re["records"]["location"][0]["locationName"] + re["records"]["datasetDescription"]

print(info_title,":\n------------------------------")
# 按預測天氣資訊分類呈現各時段數據
for i in range(len(re["records"]["location"][0]["weatherElement"])):
    for j in range(len(re["records"]["location"][0]["weatherElement"][i]["time"])):
        print("時間:",re["records"]["location"][0]["weatherElement"][i]["time"][j]["startTime"],"~",re["records"]["location"][0]["weatherElement"][i]["time"][j]["endTime"])
        print(tlist[i],re["records"]["location"][0]["weatherElement"][i]["time"][j]["parameter"]["parameterName"])
    print("*"*30)

print("++"*20)
# 按天氣預報時間分類呈現各項天氣資訊
for j in range(len(re["records"]["location"][0]["weatherElement"][0]["time"])):
    print("時間:", re["records"]["location"][0]["weatherElement"][0]["time"][j]["startTime"], "~",
        re["records"]["location"][0]["weatherElement"][0]["time"][j]["endTime"])
    for i in range(len(re["records"]["location"][0]["weatherElement"])):
        print(tlist[i], re["records"]["location"][0]["weatherElement"][i]["time"][j]["parameter"]["parameterName"])
    print("--"*20)
  


執行後,二種資料呈現方式如下供參:



沒有留言:

張貼留言