用 yfinance API 抓取台美港股股價(支援多檔查詢)
BY PJ.
-2025 年 4 月 19 日
(最後更新於: 2025 年 5 月 10 日)
在處理股市資料分析時,抓取歷史股價是常見需求。今天要介紹一個免費又好用的工具:由 Yahoo Finance 提供的 yfinance
API,不僅支援台股、美股、港股,還可取得最長達 20 年以上的歷史資料,並支援同時查詢多檔股票,大幅減少 request 次數,避免被封鎖。
🔧 安裝與基本設定
首先,我們需要安裝 yfinance
:
pip install yfinance
接著在程式中引入:
import yfinance as yf
📈 單檔股票查詢
使用 yf.Ticker()
可抓取單一股票的歷史資料。以下是查詢台積電(2330)的範例:
ticker = yf.Ticker("2330")
df = ticker.history(period='max', auto_adjust=False)
print(df.head())
1. period
可選參數如下:
參數值 | 說明 |
---|---|
1d | 一天 |
5d | 五天 |
1mo | 一個月 |
3mo | 三個月 |
6mo | 六個月 |
1y | 一年 |
2y | 兩年 |
5y | 五年 |
10y | 十年 |
ytd | 今年以來 |
max | 最長資料 |
2. 股票代碼格式
- 台股:可直接用代碼或加
.TW
,例如2330
、2330.TW
- 美股:直接用代碼,例如
AAPL
、MSFT
- 港股:代碼後需加
.HK
,例如0005.HK
(匯豐控股)
3. auto_adjust
參數說明:
- auto_adjust = True 時,Close 欄位為還原股價,是根據歷史配息、分割往前推算股價。
- auto_adjust = False 時,會出現
Adj Close
欄位,等於auto_adjust = True 的 Close ,而此時的 Close 即為當日真實收盤價
。 - Yahoo Finance 網頁所呈現的資料與 auto_adjust = False 相同。
🔗 Yahoo Finance 網站資料參考:AAPL 歷史股價
📊 多檔股票同時查詢(批次查詢
為了避免大量 request 被封鎖,建議改用 yf.Tickers
方法來同時查詢多檔股票,實測可同時查詢超過 1000 檔台股資料!
使用方式:
import yfinance as yf
import pandas as pd
# 設定要查詢的股票代號(含市場識別碼)
stock_list = ['2330.TW', 'AAPL', '0005.HK']
stock_str = ' '.join(stock_list)
# 批次取得資料,只發出一次 request
tickers = yf.Tickers(stock_str)
# 建立最終合併後的 DataFrame
df_all = pd.DataFrame()
for symbol in tickers.symbols:
ticker = tickers.tickers[symbol]
df = ticker.history(period='max', auto_adjust=True)
df.insert(0, 'stock_id', symbol)
df_all = pd.concat([df_all, df])
print(df_all)
這段程式碼會抓取多檔股票的歷史資料並合併成單一 DataFrame,對於後續分析非常方便。
📚 參考資源
- 官方文件:yfinance Tickers API
- GitHub 專案頁:https://github.com/ranaroussi/yfinance
🧠 總結
yfinance
是一個適合用於資料分析的免費金融資料 API,支援全球多個市場的歷史股價,包括台股、美股與港股。透過 Ticker
或 Tickers
,可以靈活查詢單檔或多檔股票資料。
- ✅ 支援最長 20 年歷史股價
- ✅ 可調整還原價格(配息、分割)
- ✅ 批次查詢降低 request 被擋風險
大多數教學只介紹單檔查詢,本文額外補充批次查詢技巧,適合需要大規模抓取股價資料的開發者或資料分析師使用。
有興趣的朋友歡迎試試看,也可以搭配 Pandas、Matplotlib 等工具做更進一步的股價分析!
#python #yfinance #yahoo #歷史股價 #api