當我們利用requests模組去讀取一些政府的線上公開資料時,有時候會遇到XML格式的資料,在處理上就會比json格式來得麻煩一些,不過,還好也有一個好用的轉換模組可以使用,現在就來看看吧。
此種情況發生在讀取高雄市政府所提供的公車路線到站時刻表上,它的網址說明如下:
https://data.gov.tw/dataset/43836
在上面這個網頁上有如下所示的說明:
意思是說,如果你在公車路線id中指定了它所提供的正確路線id之後(例如1421,所有的路線id可以參考這個網址:https://data.gov.tw/dataset/43874中所下載的CSV檔),那麼它就會傳回一個XML格式的資料,如下所示:
在Python語言中,有一個叫做xmltodict的模組可以把XML轉換成Python的字典格式,一開始也是要先安裝這個模組:
pip install xmltodict
安裝完畢之後,即可利用以下的程式碼,輕易地取出此時1421這條公車路線的所有停靠站之到站預估時刻了。
import requests
import xmltodict
url = "https://ibus.tbkc.gov.tw/xmlbus/GetEstimateTime.xml?routeIds=1421"
html = requests.get(url).text
data = xmltodict.parse(html)
stops = data["BusDynInfo"]["BusInfo"]["Route"]["EstimateTime"]
for stop in stops:
print(stop["@StopName"], stop["@comeTime"])
以下是執行結果:
金獅湖站 10:20
金鼎路口 10:20
金山路口 10:20
鼎西里 10:21
鼎金國小 10:22
鼎金國中 10:23
和順街口 10:25
大順民族路口 10:26
慈濟靜思堂(龍華國中) 10:27
大順一路(好市多) 10:28
捷運凹子底站(大順一路) 10:30
龍華國小 10:32
龍德路口(大順一路) 10:32
裕誠路口(大順一路) 10:33
龍子里 09:54
變電所(中華二路) 09:55
九如三路口 09:56
臺鐵三塊厝站(中華路) 09:58
三民市場 09:59
七賢二路口(中華三路) 10:00
六合二路口 10:01
捷運市議會站 10:03
台灣銀行(健保署) 10:04
歷史博物館(高雄國際會議中心) 10:05
捷運鹽埕埔站(大仁路) 10:07
捷運鹽埕埔站(大仁路) 10:07
大智路(光榮國小) 10:07
大智路口(五福四路) 10:09
大成街口(輕軌真愛碼頭站) 10:09
高雄女中(真愛碼頭) 10:11
漢神百貨 10:13
苓雅市場 10:13
自強三路口(四維四路) 10:15
中華四路口 10:16
苓雅國中 10:18
忠孝路口(四維三路) 10:19
市政大樓(四維三路) 10:20
復華中學 10:21
光華路口(四維二路) 10:23
廣東一街口 10:23
長青服務中心 10:24
輕軌衛生局站(凱旋醫院) 10:26
四維一路 10:27
福安路口 10:28
捷運五塊厝站(福德三路) 10:28
建國一路口 10:31
福德市場 10:32
憲政路口 10:34
臺鐵科工館站 09:55
大順覺民路口(科工館) 09:56
樹德家商 09:57
正興國小 09:58
建工路口(高雄高工) 10:00
大順二路 10:01
鼎山街口 10:02
鼎金國中 10:04
鼎金國小 10:05
鼎西里 10:07
金山路口 10:08
金鼎路口 10:08
金獅湖站 10:08