爬取现在天气
这篇文章会介绍如何从气象数据开放平台里,取得现在天气数据的 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]}。') # 顯示結果
小结
中央气象局的气象数据开放平台提供了很多好用的即时数据,只要了解爬虫原理,就可以很轻松的抓取数据,进行后续的应用。
微信扫码关注
抖音扫码关注