Python 簡易「爬取該 API 並解析 JSON」的需求

 使用 Python 呼叫此 API,取得 JSON 回傳後並進行解析。此範例使用 requests 套件發送 HTTP GET 請求,然後透過 json() 解析資料。

若尚未安裝 requests,可使用 pip install requests 進行安裝。

https://colab.research.google.com/drive/1j1zJlYtbAWaeCMKd-TXYnqLBjvN645iZ?usp=sharing

import requests

import json


def get_stock_info(stock_id='2330'):

    # 目標 URL,結合指定股票代號

    url = f'https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_{stock_id}.tw'

   

    # 取得網頁資料

    response = requests.get(url)

   

    # 確認是否成功連線(HTTP status code)

    if response.status_code == 200:

        # 將回傳內容轉為 JSON

        data = response.json()

       

        # 簡單檢查結構

        # data 的結構示例:

        # {

        #   "msgArray":[{ ... }],

        #   "referer":"",

        #   "userDelay":5000,

        #   "rtcode":"0000",

        #   "queryTime":{ ... },

        #   "rtmessage":"OK",

        #   "exKey":"if_tse_2330.tw_zh-tw.null",

        #   "cachedAlive":2265

        # }

       

        # 取得 msgArray,通常只有一筆資料 (index=0)

        msg_array = data.get('msgArray', [])

        if len(msg_array) > 0:

            stock_data = msg_array[0]

           

            # 以下為示範如何拿出常見的欄位,依需求自行擴充

            stock_name = stock_data.get('n', '')     # 公司簡稱,如「台積電」

            full_name = stock_data.get('nf', '')     # 公司全名,如「台灣積體電路製造股份有限公司」

            current_price = stock_data.get('z', ''# 當前成交價

            open_price = stock_data.get('o', '')     # 開盤價

            high_price = stock_data.get('h', '')     # 最高價

            low_price = stock_data.get('l', '')      # 最低價

            bid_price = stock_data.get('b', '')      # 五檔買價(以 '_' 隔開)

            ask_price = stock_data.get('a', '')      # 五檔賣價(以 '_' 隔開)

            volume = stock_data.get('v', '')         # 累積成交量

            date = stock_data.get('d', '')           # 日期(格式:YYYYMMDD)

            time = stock_data.get('t', '')           # 時間(格式:hh:mm:ss)

           

            # 印出結果

            print(f"股票代號: {stock_id}")

            print(f"公司簡稱: {stock_name}")

            print(f"公司全名: {full_name}")

            print(f"日期: {date}")

            print(f"時間: {time}")

            print(f"開盤價: {open_price}")

            print(f"最高價: {high_price}")

            print(f"最低價: {low_price}")

            print(f"當前成交價: {current_price}")

            print(f"累積成交量: {volume}")

            print(f"五檔買價 (以 '_' 隔開): {bid_price}")

            print(f"五檔賣價 (以 '_' 隔開): {ask_price}")

        else:

            print("msgArray 內無資料,請確認 API 回傳格式。")

    else:

        print(f"無法取得資料,HTTP 狀態碼:{response.status_code}")


# 呼叫函式測試

if __name__ == '__main__':

    get_stock_info('2330'# 以台積電 2330 為例











程式說明

  1. 匯入套件:

    • requests 用於發送 HTTP/HTTPS 請求。
    • json (Python 內建模組) 用於解析 JSON 格式的字串。
  2. 組合 API URL:

    • 目標 URL 為「https://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_2330.tw」,可以直接將股票代號接在 ex_ch=tse_<stock_id>.tw 後面。
  3. 發送請求:


    response = requests.get(url)
    • 此時 response 物件包含了 HTTP 回應資訊與 JSON 資料。
  4. 檢查回傳是否成功 (status_code == 200):

    • 若成功,使用 response.json() 來轉成 Python 字典或清單的結構。
  5. 解析資料結構:

    • 主要欄位 msgArray 內包含了該支股票的多項資訊(通常只會有一筆)。
    • 可依需求擴充想要取得的欄位,例如:開盤、最高、最低、成交量、買賣五檔等。
  6. 印出或儲存資料:

    • 將所需資料顯示在終端機或自訂後續處理流程(如寫入資料庫等)。

此範例即可達到簡易「爬取該 API 並解析 JSON」的需求。若你需要更進一步的資料整理(例如切割五檔買價和賣價、計算漲跌幅等),可以依照需求再做邏輯處理或運算。