利用python串接API抓取氣象預報資料

Yanwu
Learning data with Python
3 min readJun 9, 2018

希望透過網頁爬蟲抓取氣象局鄉鎮預報中的逐3小時預報資料。網頁如下圖:

欲抓取資料為右下角的逐3小時預報中的氣象資料,檢視網頁原始碼會發現,此為javascript所寫的網頁,圖中只有顯示新北市板橋區的資料,必須點選左邊地圖,才會跳至其他鄉鎮市區。因此必須透過更改網址路徑來去連結其他鄉鎮市區,抓取工作會變得相對麻煩。可參考此網頁

後來找到,政府資料開放平台有提供鄉鎮天氣預報-全台灣各鄉鎮市區預報資料的api,可以串接使用。本篇將介紹串接氣象局api下載每日氣象預報資料,並透過python整理資料,最後上傳至SQL server,程式寫好之後,透過Windows工作排程,每日自動執行。

載入套件

首先先匯入會使用到的套件包並設定好路徑,最後連接上api。這邊會使用的套件有基本的 pandas & numpy ,再來是 BeautifulSoup 用來整理xml資料格式。 datetime & os 用來建立時間及路徑。 pyodbc 是python連接SQL的套件包。

建立路徑及時間

先使用datetime 抓取今日時間,用在紀錄下載日期。並在現今路徑下新增一個 cwb_weather_data 的資料夾,用以存放整理好的氣象資料。

連接api,並下載資料

在氣象局所提供的api是一個zip檔,裏頭包含138個xml檔案,我們只會使用裏頭72hr的中文資料,其餘檔案是72小時的英文資料及每周預報。因此我們必須先載入 urllib.request 用來存取網頁裡的檔案,再使用 zipfile.ZipFile 讀取所下載的zip檔。接著連接氣象局api(請參考此網頁),建立api_key。執行到這邊,應該就會在指定路徑裡看到一個zip檔了。

整理資料

由於氣象局所提供的是xml的網頁格式,不是熟悉的json檔,所以接下來會使用類似html網頁爬蟲的方式找到所要資料的位置,並整理成list,最後彙整成dataframe的格式匯出。

建立路徑存檔

連結SQL,並上傳

首先把資料轉換成 list 的格式,使用 pyodbc 套件,連接SQL,並把資料逐一上傳至SQL方便存取使用。

到此,可以把今日之後的72小時氣象預報資料下載至電腦及上傳至SQL。若要固定每日自動執行程式,需依靠windows裡的工作排程器,建立工作排程,設定好固定時間抓取資料,自動執行程式,大大的減少我們資料蒐集的時間。可參考以下網頁:

--

--