過去曾經介紹過用 Excel VBA 抓取 Yahoo Finance 股價,EXCEL VBA yahoo finance網路抓資料心得,但由於 Yahoo Finance API 政策改變,VBA 方法已不再穩定。因此我現在已經改用 Python yfinance 套件,事實上,它抓數據時表現也比較穩定。

yfinance 是目前最多人使用的免費股價資料套件,可以抓取個股歷史股價、股息資料、財務報表等,完全免費且持續維護更新。

本文適合有基礎 Python 概念的讀者,若你完全沒用過 Python,建議先安裝編輯器,你可以想像成作業系統,類似你在 EXCEL裡面編寫VBA的視窗,如果你沒有想法,可以裝個visualstudio來用,都是免費的。

https://code.visualstudio.com/thank-you?dv=win64user

然後再安裝 Anaconda 或 Python 3.x 環境再繼續。

https://www.anaconda.com/download

https://www.python.org/downloads

內容目錄

📌 安裝 yfinance

在終端機或命令提示字元執行以下指令,如果找不到的話就按鍵盤”WIN鍵”,輸入”CMD”,然後再黑屏中輸入以下指令:

pip install yfinance

安裝完成後即可在 Python 腳本中 import 使用。

📌 基本用法:抓取單一股票歷史股價

以可口可樂(KO)為例,抓取過去一年的每日股價:

import yfinance as yf

# 建立股票物件

ticker = yf.Ticker(‘KO’)

# 抓取過去一年的歷史股價

df = ticker.history(period=’1y’)

# 顯示前5筆資料

print(df.head())

period 參數常用選項:

📌 抓取股息資料

對存股投資者來說,股息資料比股價更重要。以下範例抓取 KO 的歷史股息:

import yfinance as yf

ticker = yf.Ticker(‘KO’)

# 抓取歷史股息資料

dividends = ticker.dividends

print(dividends)

# 只看最近5次發放

print(dividends.tail(5))

回傳的資料包含每次除息日期和每股股息金額,可以進一步計算股息成長率或歷史殖利率。

📌 同時抓取多支股票

如果你想一次比較多支存股標的(例如 KO、JNJ、PG),可以用 download 函數批量下載:

import yfinance as yf

# 一次抓取多支股票的收盤價

tickers = [‘KO’, ‘JNJ’, ‘PG’]

df = yf.download(tickers, period=’1y’)[‘Close’]

print(df.head())

回傳的是一個 DataFrame,每欄是一支股票的收盤價,可以直接做比較圖或進一步分析。

📌 將資料儲存到 Excel

抓到資料後,可以直接輸出成 Excel 檔案,方便後續分析:

import yfinance as yf

ticker = yf.Ticker(‘KO’)

df = ticker.history(period=’5y’)

# 輸出成 Excel 檔案

df.to_excel(‘KO_history.xlsx’)

print(‘已儲存至 KO_history.xlsx’)

注意:若要輸出 Excel,需額外安裝 openpyxl,即在CMD輸入以下:

pip install openpyxl

📌 一鍵抓取代碼

import yfinance as yf

import pandas as pd

# 移除時區資訊

pd.set_option('display.max_columns', None)

# 建立股票物件 - KO (可口可樂)

ticker = yf.Ticker('KO')

# 抓取過去一年的歷史股價

df = ticker.history(period='1y')

print("前5筆股價資料:")

print(df.head())

print("\n" + "="*50 + "\n")

# 📌 抓取股息資料

dividends = ticker.dividends

print("歷史股息資料:")

print(dividends)

print("\n最近5次股息:")

print(dividends.tail(5))

print("\n" + "="*50 + "\n")

# 📌 同時抓取多支股票

tickers = ['KO', 'JNJ', 'PG']

df_multi = yf.download(tickers, period='1y')['Close']

print("多支股票收盤價(前5筆):")

print(df_multi.head())

print("\n" + "="*50 + "\n")

# 📌 將資料儲存到 Excel(移除時區)

ticker = yf.Ticker('KO')

df_long = ticker.history(period='5y')

# 移除時區資訊

df_long.index = df_long.index.tz_localize(None)

df_long.to_excel('KO_history.xlsx', index=True)

print('已儲存至 KO_history.xlsx')

📌 抓到股息資料之後,可以做什麼?

有了歷史股息資料,常見的進一步分析方向有幾個:

以上分析都可以用 Python 自己寫,也有現成工具可以參考。如果你對存股分析有興趣,本站另有相關介紹文章,歡迎延伸閱讀。

年化報酬與策略,股息率迴歸分析工具試用

📌 常見問題

Q:yfinance 的資料準確嗎?

資料來源是 Yahoo Finance,一般用途(研究、分析)足夠準確。但資料偶爾有缺漏或延遲,不建議用於即時交易決策。

Q:跟舊的 VBA 版本差在哪?

Yahoo Finance 在 2024 年後多次調整 API,VBA 透過網頁爬取的方式已不穩定,常常突然失效。yfinance 由社群持續維護,穩定性高很多,也支援更多資料類型(股息、財報、選擇權等)。

Q:需要申請 API Key 嗎?

不需要,yfinance 完全免費,安裝後直接使用,不需要註冊或申請任何金鑰。