日本株3,700銘柄の配当・優待データを一括取得するPythonスクリプトを作った話
こんにちは、佐藤です。
S株DCAで銘柄を選ぶとき、いつもぶち当たる壁がありまして。
「この銘柄、配当利回りいくらだっけ」「優待あったっけ」「PERどのくらいだっけ」……1銘柄ずつ調べてたら日が暮れるんですよw
SBI証券のスクリーナーも便利なんですが、自分の欲しいデータを欲しい形でまとめて出すとなると、やっぱり痒いところに手が届かない。
じゃあ自分で全部取ってきてTSVにまとめちゃおうぜ、ということで作ったのがこのスクリプトです。
何ができるスクリプトなのか
ざっくり言うと、JPXの銘柄リストを食わせると、1銘柄ずつ配当データと優待情報を取ってきてTSVファイルに吐き出してくれるPythonスクリプトです。
取得元は2つ。
- yfinance — 株価・配当利回り・1株配当・PER・PBR・時価総額・52週高値/安値などの財務データ
- とあるサイト — 株主優待の有無・内容・必要最低株数
「とあるサイト」については……まあ、察してくださいw
スクレイピングNGっぽいのであえて名前は伏せてます。READMEでも「とあるサイト」表記にしてあります。
主な特徴はこんな感じです。
- 異常値の自動検証 — 配当利回りを自前計算して、yfinanceのraw値との乖離チェック。利回り8%以上で「要確認」、15%以上で「異常値疑い」、30%以上で「除外推奨」のフラグが自動で付く
- 途中再開 —
--resumeオプションで前回の出力TSVを読み込んで、エラーだった銘柄だけ再取得。3,700銘柄を一気にやる必要なし - 行範囲指定 —
--s/--eで「今日は1〜500番まで」みたいに分割実行できる - ブロック回避 — UAローテーション・3〜5秒のランダムウェイト・10連続エラーで自動停止
- Ctrl+C対応 — 途中で止めても取得済みデータはちゃんとTSVに保存される
750行くらいのPythonスクリプトです。GitHubで公開してます。
👉 stock-nikki-tools / 配当データ取得スクリプト(GitHub)
AIと一緒に開発した話
このスクリプト、佐藤が一人で書いたわけじゃないです。いつものAIチームとの共同開発ですw
クロちゃん(Claude) がコード生成を担当。「こういう機能が欲しい」と伝えると、だいたい一発で動くコードが出てくる。ただし数値まわりは平気で嘘つくので注意(後述)。
チャッピー(ChatGPT) はQAレビュー担当。実際の取得データを食わせて「ここの値おかしくない?」をチェックしてもらう。バグ報告が「処方箋」形式で返ってくるのが地味に便利で、そのままクロちゃんに渡して修正、というサイクルを回してました。
v1はシンプルに「yfinanceから配当取ってTSV出す」だけだったんですが、実データを流してみると問題が山ほど出てきまして……。
- yfinanceの
dividendYieldが小数なのかパーセントなのか銘柄によってバラバラ - 株式分割直後の銘柄で配当利回り100%超えみたいな異常値が出る
- 優待情報サイトのHTMLの構造がページによって微妙に違う
こういうのを1個ずつ潰していった結果、v1 → v2 → v3 → v3.1 と4世代まで進化しました。AI2体と人間1人のチーム開発、なかなか生産性高いですよw
実際に取得したデータを公開してます
スクリプトだけ公開しても「動かすの面倒くさい」って人が大半だと思うので、取得済みデータもGitHubにアップしてます。
JPXのプライム・スタンダード・グロース市場の約3,700銘柄分のデータです。TSV形式なのでExcelやスプレッドシートにそのまま貼れます。
主なカラムはこのあたり。
| カラム | 説明 |
|---|---|
| コード / 銘柄名 | 証券コード・銘柄名 |
| 株価 | yfinance取得時点の株価 |
| 配当利回り(%) | 自前計算(1株配当÷株価×100) |
| 1株配当(円) | 年間1株配当 |
| PER / PBR | 株価指標 |
| 時価総額(億円) | 時価総額 |
| 優待有無 | あり / なし / 要確認 |
| 優待内容 | 優待の概要(最大300文字) |
| 注意フラグ | 異常値疑い・高利回り要確認 等 |
| ランキング利用可否 | 配当/優待/総合の3段階判定 |
ご自由にスクリーニングにお使いください。 ただし、yfinanceの値は速報値なので、投資判断の前には必ず証券会社や四季報のデータで裏取りしてくださいね。
使い方(ざっくり)
Pythonが動く環境があれば、こんな感じで使えます。
# セットアップ
pip install yfinance pandas requests beautifulsoup4
# 基本実行(stock_list.tsv の全銘柄を取得)
python nikkei225_dividend_fetcher.py
# 銘柄リストを指定
python nikkei225_dividend_fetcher.py --list standard225.tsv
# 分割実行(1〜500番目だけ)
python nikkei225_dividend_fetcher.py --s 1 --e 500
# 前回の出力から途中再開
python nikkei225_dividend_fetcher.py --resume dividend_20260625.tsv
入力に使う銘柄リストTSVは、JPXの銘柄一覧ExcelをTSV化したものでOKです。ヘッダーに「コード」と「銘柄」を含む列があれば自動認識します。
3,700銘柄フルで回すと、ウェイト込みで数時間かかります。--s/--eで500件ずつに分けて、数日に分散して実行 → --resumeでエラー分を回収、というのが現実的な運用です。
詳しくはGitHubのREADMEをどうぞ。
ハマったポイント・工夫した点
このスクリプト、作ってみると「そんなの聞いてないよ」な落とし穴がいっぱいありましたw
yfinanceの配当利回りが信用できない問題
yfinanceのdividendYield、ある銘柄では0.025(=2.5%)で返ってくるのに、別の銘柄では2.5(=2.5%)で返ってくるんですよ。小数なのかパーセントなのか統一されてないw
なので自前計算(1株配当÷株価×100)を正として、raw値は参考データとして横に並べる方式にしました。さらに両者の乖離が2%以上あったら「利回り乖離」フラグを自動で付けてます。
異常値が想像以上に多い
株式分割直後の銘柄とか、上場したてで配当実績がない銘柄とか、yfinanceが返す配当利回りが100%超えなんてことが普通にあります。
これをそのままランキングに使ったら大事故なので、3段階(8%以上 → 15%以上 → 30%以上)で注意フラグを付けて、「ランキング利用可否」列で除外推奨まで判定するようにしました。
優待サイトのブロック対策
「とあるサイト」は当然ながら大量アクセスを歓迎してないので(そりゃそうだ)、3〜5秒のランダムウェイトとUAローテーションを入れてます。それでも連続でやりすぎるとブロックされると思うので、5連続エラーで警告、10連続で優待取得を自動停止する安全弁も付けました。
このウェイトは絶対に外さないでくださいねw。 README にも書いてありますが、大事なことなので2回言いますw
Ctrl+Cで止めてもデータが消えない
3,700銘柄を回してる途中で「あ、やっぱ今日はここまでにしよう」ってことがよくあるので、1銘柄取得するたびにTSVを上書き保存してます。Ctrl+Cで中断しても、取得済み分はちゃんと残ります。
今後やりたいこと
この取得データを使って、いくつかやりたいことがあります。
- 高配当銘柄ランキング記事 — 異常値を除外した上での「本当に信頼できる高配当ランキング」を作りたい
- 優待銘柄一覧記事 — S株(単元未満株)だと優待もらえない銘柄が多いけど、一覧としての価値はある
- ウォッチリストのファンダメンタル分析 — 今SBIのウォッチリストに入ってる約200銘柄の配当・指標データを一括チェックして、DCA候補を絞り込む
スクリプト自体も、まだ改善の余地はあります。yfinanceの配当データは「過去1年の実績ベース」なので、来期予想配当とか増配/減配の傾向までは拾えない。このへんは別のデータソースと組み合わせる必要がありそうです。
まあ、少しずつ育てていきますw
⚠ 免責事項
当記事で紹介しているスクリプト・データは、個人のスクリーニング用に作成したものであり、投資の推奨・助言を目的としたものではありません。yfinanceから取得したデータは速報値であり、正確性は保証されません。投資判断はご自身の責任でお願いします。
また、優待情報の取得先サイトに過度な負荷をかけることのないよう、ウェイト設定は必ず維持してご利用ください。

