※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。
Pythonで株価データを自動取得したいと考え、スクレイピング(Scraping:Webページからデータを機械的に抽出する技術)を検討している方は多いはずです。
自前でHTMLを解析すればどんなサイトからでもデータが取れるように見えますが、その手軽さの裏には法的リスクとサービス利用規約違反のリスクが潜んでいます。
実際に「スクレイピングでIPアドレスをBANされた」「証券会社から警告メールが届いた」といった事例は珍しくありません。最悪の場合、法的措置に発展する可能性もあります。
原因は、金融情報サイトの利用規約や著作権法・不正アクセス禁止法への理解が不足したまま、安易にスクレイピングを実行してしまうことにあります。
本記事では、株価スクレイピングに伴う法的リスク・規約リスク・技術リスクの3つを整理し、yfinanceなどの公式API・ライブラリを使うべき理由を客観的に解説します。
「何がダメで何が安全なのか」の判断基準を明確にすることで、安心してデータ取得の環境を構築できるようになります。
株価スクレイピングに伴う3つのリスク
法的リスク:著作権法と不正アクセス禁止法
株価データそのものは「事実の記載」であり、個々の数値に著作権は原則発生しません。しかし、データベースとして体系的に編集・構成された株価情報にはデータベースの著作物としての保護が及ぶ場合があります。
さらに重要なのが不正アクセス禁止法です。ログインが必要なページに対して、認証を回避してアクセスする行為は同法に抵触する可能性があります。証券会社のマイページや有料情報サービスのスクレイピングは絶対に行ってはいけません。
利用規約違反によるアカウントBAN
ほぼすべての金融情報サイトは、利用規約でスクレイピングを明示的に禁止しています。以下は主要サイトの規約状況です。
| サイト | スクレイピング禁止の明記 | 違反時のリスク |
|---|---|---|
| Yahoo!ファイナンス(日本版) | あり | アクセス遮断・法的措置 |
| 株探(Kabutan) | あり | IP BAN・法的措置 |
| SBI証券 | あり | 口座凍結の可能性 |
| 楽天証券 | あり | 口座凍結の可能性 |
規約違反は民事上の契約違反に該当します。「知らなかった」は通用しません。対象サイトの利用規約を必ず事前に確認してください。
技術リスク:IP BANとHTML構造変更
仮に規約を無視してスクレイピングを実行しても、技術的な問題で持続的なデータ取得は困難です。
* IP BAN:短時間に大量リクエストを送ると、IPアドレス単位でアクセスを遮断される
* HTML構造の変更:サイトのリニューアルでHTMLの構造が変わると、パーサーが即座に壊れる
* JavaScript描画:動的に生成されるページはBeautifulSoup単体では取得できず、Seleniumが必要になり実装コストが跳ね上がる
保守コストの高さと法的リスクを天秤にかけると、スクレイピングは割に合わない手段です。
安全なデータ取得手段の選定基準
公式API・ライブラリを選ぶ3つの判断基準
安全にデータを取得するための選定基準は以下の3つです。
- 利用規約でデータ取得が許可されていること:APIキーの発行や利用規約への同意を経て提供されるデータは、正規の利用として認められる
- 提供元が明確であること:データソースが取引所やデータベンダーなど、再配布の権限を持つ事業者であること
- レートリミット(Rate Limit:単位時間あたりのリクエスト上限)が明示されていること:制限が明示されている時点で、その範囲内の利用は想定されている
この3基準を満たさない手段でデータを取得することは、避けるべきです。
robots.txtの確認方法
Webサイトがスクレイピングを許可しているかどうかは、robots.txt(ロボッツテキスト:クローラー向けのアクセス制御ファイル)で確認できます。
対象サイトのURLに/robots.txtを付けてブラウザでアクセスしてください。Disallow: /と記載されている場合、全ページへのクローラーアクセスが禁止されています。
ただし、robots.txtは法的拘束力を持ちません。あくまで「慣習的な意思表示」です。規約上の禁止とrobots.txtの両方を確認し、いずれかで禁止されていれば対象外と判断してください。
【比較】推奨データ取得手段とその特徴
無料で使えるライブラリ・API
| ライブラリ/API | 対象市場 | 日本株対応 | リアルタイム | 制限事項 |
|---|---|---|---|---|
| yfinance | 全世界 | ○(.T付与) | 15分遅延 | 非公式API・商用利用は要確認 |
| J-Quants API | 日本株 | ◎ | プランによる | 無料プランは取得件数制限あり |
| stooq | 全世界 | ○ | 終値のみ | pandas-datareaderで取得可能 |
| Alpha Vantage | 全世界 | △ | APIキー必要 | 無料は5リクエスト/分 |
yfinanceは最も手軽ですが、Yahoo Finance USの非公式APIを利用している点に注意が必要です。Yahoo側の仕様変更で突然動かなくなるリスクがあります。
本格的な日本株分析には、JPX(日本取引所グループ)が提供するJ-Quants APIの利用を推奨します。公式データソースであり、規約上の問題が発生しません。
yfinanceが「推奨」される理由と注意点
yfinanceが多くの個人投資家に推奨される理由は以下の3点です。
* 導入が極めて簡単:pip install yfinanceだけで利用開始できる
* コードがシンプル:yf.download("7203.T", period="1y")の1行でデータ取得が完了する
* 豊富な実績:Pythonの金融分析コミュニティで事実上の標準ライブラリとなっている
一方で、yfinanceはYahoo Finance側の非公式エンドポイントを利用しています。大量リクエストの送信や商用システムへの組み込みは避けてください。個人の学習・分析目的の範囲で利用するのが安全です。
安全にデータ取得するための実践ルール
リクエスト頻度と利用範囲のガイドライン
APIやライブラリを使う場合でも、節度あるリクエストが求められます。以下のルールを守ってください。
* リクエスト間隔は最低1秒以上空ける。time.sleep(1)を必ず挟む
* 1日あたりのリクエスト数を自主的に制限する。yfinanceであれば1日2,000リクエスト以下を目安にする
* 取得したデータはローカルに保存して再利用する。毎回ダウンロードし直さない
以下は、ローカルキャッシュを活用する設計の一例です。
取得リクエスト
→ ローカルCSVが存在するか確認
→ 存在し、かつ当日更新済み → CSVから読み込み
→ 存在しない、または未更新 → APIから取得 → CSVに保存
この設計にするだけで、不要なリクエストを大幅に削減できます。
スクレイピングがやむを得ない場合の最低限のマナー
どうしてもAPI提供がないサイトからデータを取得する必要がある場合、以下の条件をすべて満たすか確認してください。
* robots.txtで対象パスがDisallowになっていないこと
* 利用規約にスクレイピング禁止の明記がないこと
* ログイン不要の公開ページであること
* リクエスト間隔を5秒以上空けること
* 取得データを第三者に再配布しないこと
1つでも満たさない場合は、そのサイトからのスクレイピングを断念してください。リスクを冒す価値はありません。
よくあるエラーと対処法
サイトにアクセスしたら403 Forbiddenが返ってきた
サーバー側でスクレイピングが検知され、アクセスが拒否されている状態です。User-Agentヘッダーが設定されていない場合、ボットとして即座にブロックされることがあります。
この状態になった場合は、そのサイトへのアクセスを即座に中止してください。IPアドレスがブラックリストに登録されている可能性があり、継続的なアクセスは事態を悪化させます。代替手段としてyfinanceやJ-Quants APIに切り替えることを強く推奨します。
yfinanceでNo data foundと表示される
ティッカーシンボルの指定ミスか、指定期間にデータが存在しないことが原因です。
以下を試してください。
* 日本株は末尾に.Tを付与する(例:"7203.T")
* ETFも同様に.Tが必要(例:"1570.T")
* periodとstart/endを両方指定するとエラーになる場合がある。どちらか一方に統一する
ConnectionErrorやReadTimeoutが頻発する
短時間に大量のリクエストを送っているか、ネットワーク環境に問題があることが原因です。
以下を試してください。
* time.sleep(2)でリクエスト間隔を2秒以上に設定する
* ループで複数銘柄を取得する場合、50銘柄ごとに10秒程度の長い待機時間を入れる
* VPN(Virtual Private Network:仮想プライベートネットワーク)を利用している場合は一時的にオフにして試す
まとめ
この記事では、株価スクレイピングに伴う法的リスク・規約リスク・技術リスクを整理し、yfinanceやJ-Quants APIなどの安全な代替手段を推奨する理由を解説しました。
要点を整理します。
* 金融情報サイトのスクレイピングは利用規約で明示的に禁止されており、アカウントBANや法的措置のリスクがある
* 不正アクセス禁止法や著作権法(データベースの著作物)に抵触する可能性があるため、ログイン認証を伴うページの機械的アクセスは絶対に行わない
* yfinanceは導入が容易で個人の分析用途には最適だが、非公式APIである点を理解した上で利用する
* 本格的な日本株データ取得にはJPX公式のJ-Quants APIを推奨する
* どの手段を使う場合も、リクエスト間隔の確保とローカルキャッシュの活用で不要な通信を削減する
次のステップとして、J-Quants APIの無料プランに登録し、実際にAPIキーを取得してデータをダウンロードしてみてください。
yfinanceとJ-Quants APIの両方を使いこなせるようになれば、データソースの冗長性が確保でき、一方のサービスが停止しても分析を継続できる堅牢な環境が構築できます。

