對於剛接觸Python程式的使用者來說,要一口氣學會爬蟲可能相對困難,但若想即時且輕鬆獲得台股相關數據,你可以利用證交所所提供的API進行數據蒐集。只需要簡單幾行程式碼,就能輕鬆抓到台股上千支股票的每日資訊,是不是棒呆了!!
我們示範請求上市個股的每日成交資訊的API,其他API的請求方式也是大同小異,學習完後可以自行練習抓取其他API看看。
從下圖可以發現幾個重點:
這時候可能有人會問,怎麼都只有介紹,那最重要的API呼叫網址在哪呢?別擔心,只需要點擊右側的「Try it out」按鈕後按「Execute」,即可顯示出API的完整呼叫網址囉!!
按「Execute」後,可以發現幾個重點(下圖):
請求API很簡單,我們只要利用「requests」便可輕鬆請求,而requests有兩種請求API的方式,一個是GET,一個是POST,而我們在上面介紹到該API是GET的方式,因此我們程式碼便是利用requests.get的方式進行請求,可以看到出來的結果為「Response [200]」,表示請求成功。
# 引入requests庫
import requests
# 定義API的URL
url = 'https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL'
# 發送GET請求
res = requests.get(url)
res
請求完API後就是要呈現數據了。從上面的介紹可以知道我們請求的數據格式是「json」格式,因此我們利用json.loads的方式解析請求回來的數據。
import json
jsondata = json.loads(res.text)
jsondata
json格式對於使用者來說要進行數據處理跟分析會是比較難使用的方式,因此我們可以透過pandas套件進行數據呈現,以利後續一些數據處理。
# 引入pandas庫
import pandas as pd
# 將JSON數據轉換為DataFrame
df = pd.DataFrame(jsondata)
# 將"Code"列設置為索引
df.set_index("Code", inplace=True)
# 將空字符串替換為'0'
df.replace('', '0', inplace=True)
# 將除了"Name"列以外的所有列轉換為浮點數
df[df.columns.difference(['Name'])] = df[df.columns.difference(['Name'])].astype(float)
# 顯示DataFrame
df
最後我們利用請求到的數據進行簡單的兩個圖表呈現:
※ 為解決中文字體在畫圖中顯示異常,可以添加以下程式碼
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] # 修改中文字體
plt.rcParams['axes.unicode_minus'] = False # 顯示負號
從下圖可以看出,目前台股上市公司的「股神」仍然是我們的大立光。大立光長期以來在光學鏡頭和光電元件領域保持著領先地位,依靠其卓越的技術和穩定的市場需求,保持著高股價。緊隨其後的是緯穎、世芯-KY等公司。這些公司的成功並非偶然,而是與當前的市場趨勢密切相關。正如我們從前十大股價公司中所見,目前市場上的投資熱點集中在AI熱潮以及相關的半導體、伺服器和其他硬體設備上。這些技術需求的增長不僅提升了相關公司的業績,還讓它們成為投資者眼中的獵物。
# 按收盤價排序並選取前10大收盤價的股票
top10_closing = df.nlargest(10, 'ClosingPrice')
# 視覺化
plt.figure(figsize=(15, 6))
bars = plt.bar(top10_closing['Name'], top10_closing['ClosingPrice'], color='skyblue')
plt.title('Top 10 Closing Prices',fontsize=20)
plt.xlabel('Stock Name',fontsize=20)
plt.ylabel('Closing Price',fontsize=20)
plt.xticks(fontsize=20)
# 在每個條形圖上顯示對應的股價
for bar in bars:
yval = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2, yval, round(yval, 2), ha='center', va='bottom', fontsize=12)
plt.show()
如果我們從成交量的角度進行分析,可以發現前十大交易量的股票與前十大股價的公司有著顯著的不同。其中,近期最受歡迎的股票正是新發行的元大台灣價值高息ETF (00940)。這支ETF以其低成本和高股息月月配的特性,吸引了大量投資者的目光,尤其是那些重視穩定回報和被動收入的投資者。這也正好符合我身邊朋友們最近熱烈討論要買進的話題。 其次,引起廣泛關注的還有元大台灣50反1 (台股反向ETF),這類反向ETF的交易量大增,或許反映了市場投資者對於當前股價屢創新高的擔憂。由於股市漲幅持續,投資者擔心隱含的崩跌風險,因此購買反向ETF來進行風險對沖,保護自己的投資組合免受潛在的市場下跌影響。 這些現象表明,在目前的市況下,投資者既在尋求穩健的被動收入,同時也在思考如何應對股市高漲帶來的不確定性。元大台灣價值高息 (00940) 這類高配息的ETF提供了持股收益的穩定性,而元大台灣50反1則為那些擔心市場回調的投資者提供了一個對沖的工具,兩者各攬其道,共同成為當前市場上的交易熱點。