爬取現在天氣
這篇文章會介紹如何從氣象資料開放平臺裡,取得現在天氣資料的 JSON 檔案,並使用 Python 的 Requests 函式庫,實作一個可以自動抓取現在天氣資料的網路爬蟲。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
取得氣象資料開放平台使用授權碼
參考「爬取天氣預報」文章,註冊並登入「氣象資料開放平臺」,註冊成功後會成為「一般會員」,點擊「取得授權碼」按鈕,會出現個人的授權碼,如果授權碼被盜用或出現問題,可點擊「更新授權碼」重新產生。
尋找現在天氣資料
點擊「資料主題」,選擇「觀測」,找到「自動氣象站-氣象觀測資料」資料集。
分別進入後,點擊 JSON 或 XML 的連結可以取得氣象觀測資料,點擊 API 連結,會開啟「中央氣象局開放資料平臺之資料擷取 API」的頁面,輸入個人的授權碼,就能透過 API 取出篩選後的資料。
不論是用 JSON 檔案還是 API 的方式,開啟氣象觀測資料後,可從 JSON 物件裡找到地點的名稱、城市名稱等觀測點資訊,並從氣象局的 pdf 說明,了解各個觀測因子所代表的意義。
- 自動氣象站-氣象觀測資料:說明資料
Python 爬取氣象觀測資料
使用 Requests 函式庫的 get 的方法,抓取氣象觀測資料的 JSON 網址,接著使用字典的取值方法,搭配 for 迴圈印出城市名稱、區域名稱和觀測點名稱。
import requests
url = '你的氣象觀測資料 JSON 網址'
data = requests.get(url)
data_json = data.json()
location = data_json['cwaopendata']['dataset']['Station']
for i in location:
name = i['StationName'] # 測站地點
city = i['GeoInfo']['CountyName'] # 城市
area = i['GeoInfo']['TownName'] # 行政區
print(city, area, name)
修改程式,取出氣溫和相對濕度等資訊,使用字串格式化、轉換浮點數、四捨五入的方式,就能顯示成所需要的氣象預報格式。
import requests
url = '你的氣象觀測資料 JSON 網址'
data = requests.get(url)
data_json = data.json()
location = data_json['cwaopendata']['dataset']['Station']
for i in location:
name = i['StationName'] # 測站地點
city = i['GeoInfo']['CountyName'] # 城市
area = i['GeoInfo']['TownName'] # 行政區
temp = i['WeatherElement']['AirTemperature'] # 氣溫
humd = i['WeatherElement']['RelativeHumidity'] # 相對濕度
print(city, area, name, f'{temp} 度', f'相對濕度 {humd}%')
加入搜尋與篩選的功能
修改程式,使用 input 的方式,讓使用者可以輸入縣市和觀測點的名稱,就能顯示該觀測點的氣象觀測資料。
import requests
url = '你的氣象觀測資料 JSON 網址'
data = requests.get(url)
data_json = data.json()
location = data_json['cwaopendata']['dataset']['Station']
weather = {} # 新增一個 weather 字典
for i in location:
name = i['StationName'] # 測站地點
city = i['GeoInfo']['CountyName'] # 城市
area = i['GeoInfo']['TownName'] # 行政區
temp = i['WeatherElement']['AirTemperature'] # 氣溫
humd = i['WeatherElement']['RelativeHumidity'] # 相對濕度
msg = f'{temp} 度,相對濕度 {humd}%' # 組合成天氣描述
try:
weather[city][name]=msg # 記錄地區和描述
except:
weather[city] = {} # 如果每個縣市不是字典,建立第二層字典
weather[city][name]=msg # 記錄地區和描述
show = ''
for i in weather:
show = show + i + ',' # 列出可輸入的縣市名稱
show = show.strip(',') # 移除結尾逗號
a = input(f'請輸入下方其中一個縣市\n( {show} )\n') # 讓使用者輸入縣市名稱
show = ''
for i in weather[a]:
show = show + i + ',' # 列出可輸入的地點名稱
show = show.strip(',') # 移除結尾逗號
b = input(f'請輸入{a}的其中一個地點\n( {show} )\n') # 讓使用者輸入觀測地點名稱
print(f'{a}{b},{weather[a][b]}。') # 顯示結果
小結
中央氣象局的氣象資料開放平臺提供了很多好用的即時資料,只要了解爬蟲原理,就可以很輕鬆的抓取資料,進行後續的應用。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~