用 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,例如 23302330.TW
  • 美股:直接用代碼,例如 AAPLMSFT
  • 港股:代碼後需加 .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

yfinance_df

🔗 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 是一個適合用於資料分析的免費金融資料 API,支援全球多個市場的歷史股價,包括台股、美股與港股。透過 TickerTickers,可以靈活查詢單檔或多檔股票資料。

  • ✅ 支援最長 20 年歷史股價
  • ✅ 可調整還原價格(配息、分割)
  • ✅ 批次查詢降低 request 被擋風險

大多數教學只介紹單檔查詢,本文額外補充批次查詢技巧,適合需要大規模抓取股價資料的開發者或資料分析師使用。

有興趣的朋友歡迎試試看,也可以搭配 Pandas、Matplotlib 等工具做更進一步的股價分析!

#python #yfinance #yahoo #歷史股價 #api

💬 留言區