Skip to main content

用Python來抓取政府公開資料(JSON) (新!) :台中 YouBike 2.0

台中iBike公開資料

1.先到台中市政府資料開放平台(https://opendata.taichung.gov.tw


image.png

在搜尋欄位輸入【公共自行車】:

螢幕擷取畫面 2023-12-21 141123.jpg

目前iBike只提供JSON格式資料可下載:

image.png

下方提供資料的欄位說明:

image-1620792682503.png

點擊「JSON」下載後,在【下載】的上方按下滑鼠右鍵選擇【複製下載連結】,就會取得 JSON的下載網址:

image.png

2022/12更新﹔

推測可能是線上的JSON檢視器耗費太多伺服器的資源,因此已經被取消,建議使用另一個線上JSON檢視器:

https://jsoneditoronline.org/

image.png

按下【Copy】下方的【>】,就能在右側看到解析出來的資料了。

image.png


Python程式撰寫


因為台中市iBike的資料格式非標準格式,寫法會有所不同,程式需要略為修改。

import  json, ssl, urllib.request

url = 'JSON下載網址'
context = ssl._create_unverified_context()

with urllib.request.urlopen(url, context=context) as jsondata:
    #將JSON進行UTF-8的BOM解碼,並把解碼後的資料載入JSON陣列中
     data = json.loads(jsondata.read().decode('utf-8-sig')) 


for i in range(len(data["retVal"])) :
    sna = data["retVal"][i]["sna"]    #站名
    tot = data["retVal"][i]["tot"]    #總車位數
    sbi = data["retVal"][i]["sbi"]    #車輛數
    bemp = data["retVal"][i]["bemp"]    #空位數
    print(sna ,"車位數",tot, "車輛數=",sbi, " 空位數=",bemp)

執行結果:

image.png

練習:請問要加上站點的地址,要怎麼寫?


資料的搜尋


如果我們想讓使用者依照關鍵字列出資料,可以先用input取得關鍵字,然後使用if ,配合 find 函數:

字串變數.find(要搜尋的字串)

例如:

a="This is a book"
b="a"
print(a.find(b))

結果為8  

意思就是b字串出現在a字串的第幾個字(第一個字的位置是0),如果>=0 表示a字串中有b字串,否則傳回-1


因此我們可以將這個搜尋函數應用在資料的搜尋上,例如keyword字串變數是使用者要搜尋的站點名稱,只要在for迴圈中,加上 if sna.find(keyword) >= 0 就表示站名中含有使用者要搜尋的文字。

keyword = input("請輸入站名的關鍵字==>")

練習:只要列出符合關鍵字的站點,該怎麼改寫?