爬取气象预报
这篇文章会从注册气象数据开放平台开始,介绍如何取得天气预报数据的 JSON 文件,并使用 Python 的 Requests 函数库,实作一个可以自动抓取气象预报数据的网络爬虫。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
关于气象数据开放平台
交通部中央气象局为了便利民众共享和应用政府数据,推出了“气象数据开放平台”,让民众可以在政府资源有限下,善用无限的创意,整合运用开放数据,提升政府数据质量及价值、优化政府服务质量。
气象数据开放平台:https://opendata.cwa.gov.tw/index
取得使用授权码
要使用气象数据开放平台的数据需要先“注册”,点击右上角的“注册/登录”,点击“气象会员登录”,已有账号的使用自己的账号,没有账号可以点击下方“加入会员”注册账号。
注册成功后会成为“一般会员”,点击“取得授权码”按钮,会出现个人的授权码,如果授权码被盗用或出现问题,可点击“更新授权码”重新产生。
寻找气象预报数据
点击“数据主题”,选择“预报”,搜索“36小时天气预报”,找到“一般天气预报 - 今明 36 小时天气预报”。
打开页面后,点击 JSON 或 XML 的链接可以取得台湾所有县市的预报数据,点击 API 链接,会打开“中央气象局开放数据平台之数据截取 API”的页面,输入个人的授权码,就能透过 API 取出筛选后的数据。
不论是用 JSON 文件还是 API 的方式,打开气象预报数据后,可看见如下图的 JSON 对象结构,weatherElement 里的数据就是所需的天气预报数据。
weatherElement 里有五种的预报因子,可透过程序单纯取出所需的预报因子。
| 预报因子 | 说明 |
|---|---|
| Wx | 天气现象 |
| MaxT | 最高温度 |
| MinT | 最低温度 |
| CI | 舒适度 |
| PoP | 降雨几率 |
Python 爬取天气预报
使用 Requests 函数库的 get 的方法,抓取天气预报的 JSON 网址,接着使用字典的取值方法,取出 location 里的内容并透过 for 循环印出。
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}')
修改程序,取出天气现象、最高温、最低温、降雨几率信息,使用字串格式化的方式,就能显示成所需要的气象预报格式。
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} %')
其他预报数据
除了主要县市的天气预报,气象局也提供了其他县市或行政区的天气预报,只要搜索“乡镇”就能找到对应的数据。
小结
中央气象局的气象数据开放平台提供了很多好用的即时数据,只要了解爬虫原理,就可以很轻松的抓取数据,进行后续的应用。
微信扫码关注
抖音扫码关注