2021年5月10日 星期一

【python抓爬仔】~~簡單抓取政府公開資料(新北市UBike即時資訊)來玩玩

 玩抓取資料可以很技術,也可以很生活啊!

現今愈來愈多的政府及機關公開資料可供民眾及系統設計應用,很多都是與民生相關的實用資訊!而且相關資料內容也益加完善,對於有設計及應用需求的人們真是個福音啊!

使用上也相當簡便,這次就以「新北市公共自行車租賃系統(YouBike)」的公開資料為操作範例,來練習玩玩如何簡便的獲取ubike的資時資訊並加以操作。

有關新北市的相關公開資料可以到以下位置查閱!

https://data.ntpc.gov.tw/


https://data.ntpc.gov.tw/openapi/swagger-ui/index.html?configUrl=%2Fopenapi%2Fswagger%2Fconfig&urls.primaryName=%E6%96%B0%E5%8C%97%E5%B8%82%E6%94%BF%E5%BA%9C%E4%BA%A4%E9%80%9A%E5%B1%80(28)


這次的操作練習主要目標是了解如何擷取網路上的公開資料回來加以整理、篩選出自己想要的資訊,並未多加著墨在其他的應用或呈現方式。

好囉~~一樣直接上程式碼吧.......

import requests

# 設定新北市UBike公開資料連結位置(取用json格式資料)
# 設定擷取資料筆數為700筆(目前新北市共有654個站點),若未設定size則每次預設只截取前30筆站點資料
url = 'https://data.ntpc.gov.tw/api/datasets/71Cxxxxx-A2DF-xxxxx-BEF1-xxxxx5E8A/json?size=700'
r = requests.get(url)
data = r.json()


def transform_format(mday):  # 寫個轉換日期顯示格式小函式
    Y, M, D, h, m, s = mday[:4], mday[4:6], mday[6:8], mday[8:10], mday[10:12], mday[12:14]
    return Y + '/' + M + '/' + D + ' ' + h + ':' + m + ':' + s


print('擷取的資料筆數:',len(data))

ui = 0
for u in range(len(data)):  # 逐筆讀取json資料
    if data[u]['sarea'] == '土城區':    # 判斷是否為「土城區」,屬於土城區的資料才呈現
        ui += 1
        data[u]['mday'] = transform_format(data[u]['mday'])  # 轉化「資料更新時間」顯示格式
        print(data[u])

print("「土城區」共有:",ui,"筆資料!")


程式執行結果截圖如下供參:


其中,擷取的資料代碼依網站說明如下供參:

sno(站點代號)、
sna(中文場站名稱)、
tot(場站總停車格)、
sbi(可借車位數)、
sarea(中文場站區域)、
mday(資料更新時間)、
lat(緯度)、
lng(經度)、
ar(中文地址)、
sareaen(英文場站區域)、
snaen(英文場站名稱)、
aren(英文地址)、
bemp(可還空位數)、
act(場站是否暫停營運)

從上面的操作,可以發現如果不管一些時間格式轉換,或是逐筆、篩選等相關操作,要獲取這些公開資料還真是簡便到五行程式碼就可以將資料抓取回來了!

但是,抓取回來之後如何跟自身的系統及應用面相結合,才是重點啊!

沒有留言:

張貼留言