iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
Software Development

跟著 OXXO 一起學 Python系列 第 63

( Day 30.2 ) Python 爬取天氣預報

  • 分享至 

  • xImage
  •  

這篇文章會從註冊氣象資料開放平臺開始,介紹如何取得天氣預報資料的 JSON 檔案,並使用 Python 的 Requests 函式庫,實作一個可以自動抓取氣象預報資料的網路爬蟲。

原文參考:爬取天氣預報

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

關於氣象資料開放平台

交通部中央氣象局為了便利民眾共享和應用政府資料,推出了「氣象資料開放平臺」,讓民眾可以在政府資源有限下,善用無限的創意,整合運用開放資料,提升政府資料品質及價值、優化政府服務品質。

氣象資料開放平台:https://opendata.cwb.gov.tw/index

Python 教學 - 爬取天氣預報 - 關於氣象資料開放平台

取得使用授權碼

要使用氣象資料開放平台的資料需要先「註冊」,點擊右上角的「註冊/登入」,點擊「氣象會員登入」,已有帳號的使用自己的帳號,沒有帳號可以點擊下方「加入會員」註冊帳號。

Python 教學 - 爬取天氣預報 - 取得使用授權碼

註冊成功後會成為「一般會員」,點擊「取得授權碼」按鈕,會出現個人的授權碼,如果授權碼被盜用或出現問題,可點擊「更新授權碼」重新產生。

Python 教學 - 爬取天氣預報 - 更新授權碼

尋找氣象預報資料

點擊「資料主題」,選擇「預報」,搜尋「36小時天氣預報」,找到「一般天氣預報 - 今明 36 小時天氣預報」。

Python 教學 - 爬取天氣預報 - 尋找氣象預報資料

開啟頁面後,點擊 JSON 或 XML 的連結可以取得台灣所有縣市的預報資料,點擊 API 連結,會開啟「中央氣象局開放資料平臺之資料擷取 API」的頁面,輸入個人的授權碼,就能透過 API 取出篩選後的資料。

連結:一般天氣預報 - 今明 36 小時天氣預報

Python 教學 - 爬取天氣預報 - 今明 36 小時天氣預報

不論是用 JSON 檔案還是 API 的方式,開啟氣象預報資料後,可看見如下圖的 JSON 物件結構,weatherElement 裡的資料就是所需的天氣預報資料。

Python 教學 - 爬取天氣預報 - 開啟氣象預報資料後

weatherElement 裡有五種的預報因子,可透過程式單純取出所需的預報因子。

預報因子 說明
Wx 天氣現象
MaxT 最高溫度
MinT 最低溫度
CI 舒適度
PoP 降雨機率

Python 爬取天氣預報

使用 Requests 函式庫的 get 的方法,抓取天氣預報的 JSON 網址,接著使用字典的取值方法,取出 location 裡的內容並透過 for 迴圈印出。

參考:requests讀取字典

import requests

url = '一般天氣預報 - 今明 36 小時天氣預報 JSON 連結'
data = requests.get(url)   # 取得 JSON 檔案的內容為文字
data_json = data.json()    # 轉換成 JSON 格式
location = data_json['cwbopendata']['dataset']['location']   # 取出 location 的內容
for i in location:
    print(f'{i}')

Python 教學 - 爬取天氣預報

修改程式,取出天氣現象、最高溫、最低溫、降雨機率資訊,使用字串格式化的方式,就能顯示成所需要的氣象預報格式。

import requests

url = '一般天氣預報 - 今明 36 小時天氣預報 JSON 連結'
data = requests.get(url)   # 取得 JSON 檔案的內容為文字
data_json = data.json()    # 轉換成 JSON 格式
location = data_json['cwbopendata']['dataset']['location']
for i in location:
    city = i['locationName']    # 縣市名稱
    wx8 = i['weatherElement'][0]['time'][0]['parameter']['parameterName']    # 天氣現象
    maxt8 = i['weatherElement'][1]['time'][0]['parameter']['parameterName']  # 最高溫
    mint8 = i['weatherElement'][2]['time'][0]['parameter']['parameterName']  # 最低溫
    ci8 = i['weatherElement'][3]['time'][0]['parameter']['parameterName']    # 舒適度
    pop8 = i['weatherElement'][4]['time'][0]['parameter']['parameterName']   # 降雨機率
    print(f'{city}未來 8 小時{wx8},最高溫 {maxt8} 度,最低溫 {mint8} 度,降雨機率 {pop8} %')

Python 教學 - 爬取天氣預報 - 顯示成所需要的氣象預報格式

其他預報資料

除了主要縣市的天氣預報,氣象局也提供了其他縣市或行政區的天氣預報,只要搜尋「鄉鎮」就能找到對應的資料。

Python 教學 - 爬取天氣預報 - 其他預報資料

小結

中央氣象局的氣象資料開放平臺提供了很多好用的即時資料,只要了解爬蟲原理,就可以很輕鬆的抓取資料,進行後續的應用。

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 30.1 ) Python 爬取空氣品質指標 ( AQI )
下一篇
( Day 31.1 ) Python 爬取 Yahoo 股市即時股價
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言