2025年8月30日 星期六

Python 學習筆記 : 股票爬蟲-個股日成交資訊

本篇是閱讀劉承彥老師寫的 "Python股票演算法交易實務 147 個關鍵技巧詳解" (第二版, 博碩 2021) 第二章技巧 31 的實測紀錄. 

本系列爬蟲測試筆記索引參考 :


證交所的日成交資訊查詢網址如下 : 


在上方選擇資料年月, 輸入股票代號按 "查詢" 就會顯示該標的的全月之日成交資訊 :




利用瀏覽器的開發者工具分析, 此網頁是透過下列網址從後端伺服器取得資料 :

# https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=20250801&stockNo=2330

以下測試就直接拿前一篇測試之程式模組修改如下 : 

# twse_stock_day.py
import requests
import json
from fake_useragent import UserAgent

def get_stock_day(date, stock_no):
    url=f'https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date={date}&stockNo={stock_no}'
    ua=UserAgent()
    headers={'User-Agent': ua.random}
    res=requests.get(url, headers=headers)
    if res.status_code == requests.codes.ok:
        data=json.loads(res.text)
        return data
    else:
        print(f'Error: {res.status_code}, Response: {res.text}')
        return False

if __name__ == '__main__':
    date=input('請輸入日期 (格式 YYYYMMDD) :')
    stock_no=input('請輸入股票代號 (例如 2330) :')
    data=get_stock_day(date, stock_no)
    if data:
        print(data['fields'])
        print(data['data'])
    else:
        print('爬取網頁失敗')

執行結果如下 :

>>> %Run twse_stock_day.py   
請輸入日期 (格式 YYYYMMDD) :20250801
請輸入股票代號 (例如 2330) :2330
['日期', '成交股數', '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌價差', '成交筆數']
[['114/08/01', '45,352,225', '51,714,816,380', '1,145.00', '1,150.00', '1,130.00', '1,140.00', '-20.00', '76,135'], ['114/08/04', '25,256,974', '28,532,556,011', '1,130.00', '1,135.00', '1,125.00', '1,135.00', '-5.00', '47,206'], ['114/08/05', '20,695,955', '23,713,307,116', '1,145.00', '1,150.00', '1,140.00', '1,150.00', '+15.00', '24,124'], ['114/08/06', '24,015,506', '27,066,744,255', '1,130.00', '1,135.00', '1,125.00', '1,125.00', '-25.00', '55,936'], ['114/08/07', '64,965,686', '76,081,290,909', '1,160.00', '1,180.00', '1,155.00', '1,180.00', '+55.00', '98,335'], ['114/08/08', '27,434,505', '32,303,933,490', '1,180.00', '1,185.00', '1,170.00', '1,175.00', '-5.00', '43,558'], ['114/08/11', '37,435,809', '44,247,026,887', '1,170.00', '1,195.00', '1,165.00', '1,180.00', '+5.00', '53,135'], ['114/08/12', '30,137,118', '35,563,421,901', '1,180.00', '1,190.00', '1,170.00', '1,180.00', ' 0.00', '37,189'], ['114/08/13', '39,708,109', '47,367,251,520', '1,185.00', '1,200.00', '1,185.00', '1,200.00', '+20.00', '58,632'], ['114/08/14', '35,269,337', '41,625,421,848', '1,185.00', '1,190.00', '1,175.00', '1,175.00', '-25.00', '55,678'], ['114/08/15', '23,577,178', '27,782,518,177', '1,175.00', '1,185.00', '1,170.00', '1,180.00', '+5.00', '31,039'], ['114/08/18', '21,182,611', '24,952,978,606', '1,170.00', '1,185.00', '1,170.00', '1,180.00', ' 0.00', '29,158'], ['114/08/19', '22,439,999', '26,543,054,769', '1,180.00', '1,185.00', '1,175.00', '1,185.00', '+5.00', '19,138'], ['114/08/20', '73,148,689', '84,039,496,961', '1,165.00', '1,165.00', '1,135.00', '1,135.00', '-50.00', '201,335'], ['114/08/21', '25,030,476', '28,695,638,720', '1,140.00', '1,155.00', '1,140.00', '1,150.00', '+15.00', '39,170'], ['114/08/22', '20,220,071', '23,147,345,045', '1,155.00', '1,155.00', '1,135.00', '1,135.00', '-15.00', '37,292'], ['114/08/25', '27,470,807', '32,159,334,115', '1,165.00', '1,180.00', '1,160.00', '1,170.00', '+35.00', '38,754'], ['114/08/26', '39,495,275', '46,349,348,727', '1,165.00', '1,185.00', '1,160.00', '1,175.00', '+5.00', '25,751'], ['114/08/27', '23,824,689', '28,276,839,838', '1,190.00', '1,190.00', '1,180.00', '1,190.00', '+15.00', '30,477'], ['114/08/28', '20,960,787', '24,563,005,745', '1,185.00', '1,185.00', '1,160.00', '1,160.00', '-30.00', '36,728'], ['114/08/29', '21,820,054', '25,485,864,558', '1,180.00', '1,185.00', '1,160.00', '1,160.00', ' 0.00', '25,658']]

輸入該月任何日期都會傳回當月全部日成交資訊. 

沒有留言 :