Skip to main content

用Python來抓取政府公開資料

 

安裝套件

  1. 進入命令列模式:開始→執行 (或按下Windows + R)→輸入 CMD )
  2. 升級pip(Python套件管理工具):輸入 python -m pip install --upgrade pip 
  3. 安裝套件: pip install requests

電腦教室已安裝,不用執行以上動作

 

尋找開放資料

1.使用瀏覽器打開「政府資料開放平台」:  https://data.gov.tw/ 

2.進入「求學及進修」,在上方搜尋輸入「高中」,可找到「高級中等學校科別資料」

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 requests, json, codecs, ssl

source = requests.get('JSON下載的網址', verify=False)

decoded_data=codecs.decode(source.text.encode(), 'utf-8-sig')  #將JSON進行UTF-8的BOM解碼

data = json.loads(decoded_data)  #把解碼後的資料載入JSON陣列中
for i in data:
         print(i['學校名稱'],'\t',i['一年級男學生數'],'\t',i['一年級女學生數'])

上例中的「學校名稱」、「一年級男學生數」及「一年級女學生數」可依照「資料資源欄位」自行修改。

7.執行之後會出現以下畫面:

 

資料的計算

 

如果要統計公開資料裡面的數字,我們可以將程式略做修改,例如我們想計算全台高一男女生的人數,我們可以將資料加總。

把原來的 for i in data 迴圈改寫成:

boy=0   #男生數 變數
girl=0  #女生數 變數

for i in data:
         boy += int(i['一年級男學生數'])
         girl += int(i['一年級女學生數'])


print("高一男生總數=", boy, '女生總數=", girl)
     

 

 

資料的搜尋

 

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

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

例如:

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

結果為8  

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