【コピペOK】Pythonで株価を取得する5つの方法【初心者向け】

Python実装・コード

「Pythonで株価を取得したい」——これはPythonで投資を始める人が最初にぶつかる壁です。この記事ではyfinance・pandas-datareader・Alpha Vantage・SBI証券API・スクレイピングの5つの方法を実際に動くコードとともに解説します。

方法1:yfinance(最もオススメ)

Yahoo Financeからデータを取得する非公式ライブラリです。無料・制限なし・使いやすさで初心者に最適です。

pip install yfinance
import yfinance as yf
import pandas as pd

# 日本株(トヨタ)
toyota = yf.download("7203.T", period="1y", progress=False)
print(toyota.tail())

# 米国株(アップル)
apple = yf.download("AAPL", period="1y", progress=False)
print(apple.tail())

# 複数銘柄を一度に取得
tickers = ["7203.T", "9984.T", "AAPL", "NVDA"]
data = yf.download(tickers, period="6mo", progress=False)
close_prices = data['Close']
print(close_prices.tail())

# 銘柄の詳細情報
ticker = yf.Ticker("7203.T")
info = ticker.info
print(f"銘柄名: {info.get('longName')}")
print(f"時価総額: {info.get('marketCap'):,}円")
print(f"PER: {info.get('trailingPE')}")

方法2:pandas-datareader

様々なデータソースに対応したライブラリです。Stooqを使えば日本株も取得できます。

pip install pandas-datareader
import pandas_datareader as pdr
from datetime import datetime

# Stooqから日本株を取得
start = datetime(2023, 1, 1)
end = datetime(2024, 12, 31)

# トヨタ(Stooq形式:銘柄コード.JP)
df = pdr.data.DataReader("7203.JP", "stooq", start, end)
df = df.sort_index()  # Stooqは降順なので昇順にソート
print(df.tail())

# FRED(米国連邦準備銀行)から経済指標を取得
gdp = pdr.data.DataReader("GDP", "fred", start, end)
print(gdp.tail())

方法3:Alpha Vantage

無料APIキーで使えるファイナンシャルデータAPI。1分あたり5リクエスト、1日あたり500リクエストまで無料です。

pip install alpha-vantage
from alpha_vantage.timeseries import TimeSeries
import pandas as pd

API_KEY = "YOUR_API_KEY"  # https://www.alphavantage.co/support/ で取得

ts = TimeSeries(key=API_KEY, output_format='pandas')

# 日次データ取得(米国株)
data, meta = ts.get_daily(symbol='AAPL', outputsize='full')
data.index = pd.to_datetime(data.index)
data = data.sort_index()
data.columns = ['Open', 'High', 'Low', 'Close', 'Volume']
print(data.tail())

# リアルタイムデータ(インデックス)
data_rt, meta_rt = ts.get_quote_endpoint(symbol='AAPL')
print(f"現在値: {data_rt['05. price'][0]}")

方法4:J-Quants API(日本株専用)

日本取引所グループが提供する公式データAPI。個人投資家向け無料プランあり。

pip install jquants-api-client
import jquantsapi
import pandas as pd

# J-Quants APIクライアント初期化
# 事前にhttps://jpx-jquants.comでアカウント登録が必要
cl = jquantsapi.Client(mail_address="your@email.com", password="your_password")

# 株価データ取得(トヨタ: 72030)
prices = cl.get_prices_daily_quotes(code="72030")
df = pd.DataFrame(prices)
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date').sort_index()
print(df[['Open', 'High', 'Low', 'Close', 'Volume']].tail())

# 財務情報も取得可能
statements = cl.get_statements(code="72030")
print(pd.DataFrame(statements).head())

方法5:Webスクレイピング(Yahoo!ファイナンス)

APIがない場合の最終手段。利用規約の確認が必須です。

pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

def scrape_yahoo_finance_japan(code):
    """
    Yahoo!ファイナンスから株価情報をスクレイピング
    ※利用規約を確認の上、適切なウェイトを設けて使用すること
    """
    url = f"https://finance.yahoo.co.jp/quote/{code}.T"
    headers = {'User-Agent': 'Mozilla/5.0'}
    
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, 'html.parser')
    
    # 現在値を取得(セレクターはサイト変更で無効になる場合あり)
    price_elem = soup.find('span', {'class': '_3rXWJKZF'})
    if price_elem:
        return {'code': code, 'price': price_elem.text.replace(',', '')}
    return {'code': code, 'price': 'N/A'}

# 使用例(1秒待機してサーバー負荷軽減)
for code in ["7203", "9984", "6758"]:
    data = scrape_yahoo_finance_japan(code)
    print(data)
    time.sleep(1)

5つの方法まとめ比較

方法 難易度 コスト 日本株 米国株 リアルタイム
yfinance 無料 △(15分遅延)
pandas-datareader ★★ 無料
Alpha Vantage ★★ 無料(制限あり)
J-Quants ★★★ 無料/有料 ✅(有料)
スクレイピング ★★★ 無料

まとめ

初心者にはyfinance一択をオススメします。インストールが簡単で、日本株・米国株・ETFを問わず豊富なデータが取得できます。有料データが必要になったときにJ-QuantsやAlpha Vantageへ移行するのがスムーズです。

タイトルとURLをコピーしました