Featured image of post Python-爬取空氣品質-PM2.5-AQI

Python-爬取空氣品質-PM2.5-AQI

實作如何爬取政府公開資料並解析json儲存檔案

最後修改時間:

Python + PM25 + AQI

此篇是透過 Python 爬取 AQI 空氣品質指標的資料,再篩選出我們熟悉的細懸浮微粒 PM2.5數據儲存成檔案。

2024 可斟酌搭配 ChatGPT/ClaudeAI 提問如何用 python 爬取 pm2.5,(或是使用 AutoGPT 設定明確目標執行爬蟲),剩下來的時間了解資料結構該如何轉換,思考如何應用在日常生活中,例如用折線圖呈現產出一天內空氣品質變化,結合 IFTTT 超過多少會提醒用戶之類的,並將資料搜集彙整顯示趨勢圖,以供後續研究。

2023-0826 更新:因工作緣故收到國家科學及技術委員會來函,配合本署組改為環境部,本署環境資料關放平臺、環境資源資料交換平臺及環境資源資料交換重構平臺自112年8月22日起變更網址及應用程式介面( Application ProgrammingInterface, API),各平臺API維持新、舊API URL平行服務三個月,請於112年11月22日期限前內完成 API URL 更新。


課堂作業:透過 Pythob 爬取空氣品質 PM2.5 數據,練習如何抓取政府資料開放平台公開資料,解析 JSON 檔案並做檔案處理。

資料型態

  • 我們資料取得的是 JSON 格式

  • requests 獲取資料後將 Json 解析成字典 Dictionary

檢視 Json 的擴充工具 (chrome): https://chrome.google.com/webstore/detail/jsonview/

常見的資料格式 : JSON、CSV、XML

可參考此篇說明:認識 Web API、HTTP 和 JSON 資料交換格式

資訊擷取來源

後來發現有更好用 最新試行版(已正式上架)的

環保署環境資料開放平台開放資料 API

註冊 API Key 後可以篩選更多參數來撈資料

要解析的 json 網址:

資料集名稱先記好比較快找到

註冊 API 使用說明: https://data.moenv.gov.tw/paradigm

該單位也提供了手冊講解如何使用參數,Python 程式範例可供參考( api 網址記得更換到最新版本)

篩選資料

整個流程:request »> json »> dict »> list »> dict » key get value

request 獲得資料,用 json() 方法,將資料轉成字典,Python 可以操作的資料型態。

我們要撈出的資料是 :

1
2
key = "record"
value = [{"sitename":"各縣市","pm2.5":"10",其他數據},{同樣格式}]

aqi (value) 最外層是 list 資料型態,再從裡面的 dict 透過 key (sitename,pm2.5) 取 value (各縣市,10)。這也代表 list 裡面只要是物件都可以放入。

讀取資料的實作過程可以搭配

1
2
print(type(data))
print(dir(requests))

會更容易了解有什麼方法可以用,資料型態是什麼

實作過程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import requests
aqi_url = "https://data.epa.gov.tw/api/v1/aqx_p_432?offset=0&limit=80&api_key=自行註冊"
# 環保署環境資料開放平臺 試行版 https://data.epa.gov.tw/
# API 金鑰免費申請 ~
response = requests.get(aqi_url)
aqi = response.json()['records']
print(response.status_code)

### 200  正常回傳
### 404 回傳錯誤
print(type(response))
print(type(aqi))

資料輸出

檔案處理

“r” 唯讀模式

“w” 寫入模式(覆寫)

“a” 寫入模式(續寫)

with open("data_pm25.txt", "w", encoding="utf-8") as file:

再用 for 把資料寫入 file 當中

1
2
3
f = open('file.txt', 'w')
f.write("file-write")
f.close()

檔案讀寫的部分,rwa"+" 模式 可以都試試看,小心檔案被覆蓋 w+ 先讀再寫會:? a+ 先寫再讀會:?

參考資料

輕鬆學習 Python | 資料分析

輕鬆學習 Python:透過 API 擷取網站資料

Python 初學第十二講—檔案處理

補充:ChatGPT 指令大全 https://www.explainthis.io/zh-hant/chatgpt

本篇文章自 index.coderbridge 平台移轉此處

並重新將資料型態的部分重新說明。

comments powered by Disqus
使用 Hugo 建立
主題 StackJimmy 設計
已產出:2556字,共 11篇文章