用Python來抓取政府公開資料(JSON) -2 :台北YouBike 2.0
尋找開放資料
1.使用瀏覽器打開「政府台北市資料開放大平台臺」: https://data.gov.tw/taipei/
2.進入「求學及進修」,在上方搜尋輸入「高中」youbike」,即可找到「高級中等學校科別YouBike2.0 即時資料」
3.找到108學年度,點擊前面後按下右邊的「檢視資料」:放大鏡來搜尋。
4. 先確定可看到右上角有「下載」就是資料訊介接的編碼格式是否為「UTF-8」 (萬國碼之一)網址,下方並提供「JSON下載」有主要欄位說明。
目前先以JSON格式進行練習,若資料不提供JSON格式暫勿使用。
5.將滑鼠游標移到「JSON下載」後面的網址上方,按下滑鼠右鍵並點選【複製連結網址】。例如:
https://quality.data.gov.tw/dq_download_json.php?nid=9617&md5_url=fc93547438b2106ccec5f9b6b112c0bd
6.進入Python開發環境IDLE,開啟新檔案,複製以下範例程式碼並進行修改:
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 data:
print(i['學校名稱'sna'],'\t',i['一年級男學生數'sbi'],'\t',i['一年級女學生數'bemp'])
上例中的「學校名稱」sna」、「一年級男學生數」sbi」及「一年級女學生數」bemp」可依照「資料資源欄位」自行修改。
7.執行之後會出現以下畫面:
(以下略)
練習1:請顯示所有高中YouBike站的一至三年級男女生學生可借數量及空位數量
資料的計算
如果要統計公開資料裡面的數字,我們可以將程式略做修改,例如我們想計算全台高一男女生的人數,我們可以將資料加總。
把原來的 for i in data 迴圈改寫成:
boy=bike=0 #男生#場站目前車輛數量 變數
girl=empty=0 #女生#空位數量 變數
for i in data:
boybike += int(i['一年級男學生數'sbi'])
girlempty += int(i['一年級女學生數'bemp'])
print("高一男生總全部車輛數量=", boy,bike, '女生總全部空位數量=', girl)empty)
練習2:請加總所有高中的高一二三男女生之學生YouBike站車輛及空位數量
資料的搜尋
如果我們想讓使用者依照關鍵字列出資料,可以先用input取得關鍵字,然後使用if ,配合 find 函數:
字串變數.find(要搜尋的字串)
例如:
a="This is a book"
b="a"
print(a.find(b))
結果為8
意思就是b字串出現在a字串的第幾個字(第一個字的位置是0),如果>=0 表示a字串中有b字串,否則傳回-1
因此我們可以將這個搜尋函數應用在資料的搜尋上,例如school字name字串變數是使用者要搜尋的學校站名稱,只要在i的for迴圈中,加上 if i['
就表示學校名稱中含有使用者要搜尋的文字:學校名稱'sna'].find(school)name) >= 0 0
執行結果為:
練習3:讓使用者輸入校站名址的關鍵字,計算顯示所列出空位有高中各科別10個以上的一至三年級班級站點之車輛及空位數 量 (結果要截圖上傳)
其他開放資料的應用
練習4:請自行找一項政府開放資料,試著統計或列出裡面你感興趣的資料 (必須有搜尋功能,結果截圖上傳)
如何安裝Python套件
- 進入命令列模式:開始→執行 (或按下Windows + R)→輸入 CMD )
- 升級pip(Python套件管理工具):輸入
python -m pip install --upgrade pip
- 安裝套件:
pip install requests
電腦教室已安裝,不用執行以上動作