Pythonで株価をスクレイピングする前に
Python経験者向けの投資分析シリーズ第2回。本記事は「どうやって株価サイトをスクレイピングするか」ではなく、「その前に何を確認すべきか」と「責任ある実装の作法」を扱います。多くの金融サイトはスクレイピングを禁止しており、知らずに行うと規約違反や法的トラブルにつながるおそれがあります。安全に学ぶための判断軸を身につけましょう。
- 1. まず結論:スクレイピングは「最後の手段」
- 2. 主要な株価サイトは禁止されている
- 3. サイト別:規約とrobots.txtの早見表(2026年9月28日確認)
- └ TDnet・株探のスクレイピングは禁止?(2026年10月26日確認)
- 4. やる前に必ず確認する3つ
- 5. スクレイピング禁止か確認する方法:規約の探し方5ステップ
- 6. robots.txt をプログラムで確認する
- 7. 責任ある実装の作法
- 8. 練習:許可されたサイトで手を動かす
- 9. 株価データを正規に取得できる手段:yfinance・J-Quants・EDINET
- 10. 知っておくべき法的背景
- 11. よくある質問(FAQ)
1. まず結論:スクレイピングは「最後の手段」
- Yahoo!ファイナンス・みんかぶ・株探は、公式ヘルプや利用規約で自動取得を禁止。robots.txt が株価ページを拒否していなくても、規約・ヘルプが優先します
- TDnet(適時開示情報閲覧サービス)は robots.txt で全パスを拒否。適時開示の自動収集は JPX の有料サービスが正規ルートです
- 株価・財務データは yfinance(非公式・個人の研究/学習向け)、J-Quants API(JPX公式・無料プランあり)、EDINET API(金融庁・無料登録)で取れます
取得手段の比較は次のとおりです(2026年9月28日時点の各社公開情報を当サイトが整理。料金・条件は変わることがあります)。
| 手段 | 規約上の扱い | 安定性 | 難易度 | 費用 |
|---|---|---|---|---|
| yfinance | 非公式。研究・教育・個人利用が前提で、データの利用は Yahoo の規約に従う | 中(データ元の仕様変更で動かなくなることがある) | 低(APIキー不要) | 無料 |
| J-Quants API(JPX公式) | 公式に提供。取得データそのものの配布・シェアなどは禁止 | 高 | 中(会員登録+APIキー) | 無料プランあり。有料は月額1,650円(税込)から |
| EDINET API(金融庁) | 公式に提供(有価証券報告書などの開示書類) | 高 | 中(無料の利用登録+APIキー) | 無料 |
| 公式のCSVダウンロード(Yahoo!ファイナンス VIP倶楽部、証券会社の保有CSVなど) | 提供元が用意した正規の手段 | 高 | 低 | サービスによる |
| 自作のスクレイピング(許可された対象のみ) | 規約・robots.txt・法令の3点を満たす場合に限る | 低(HTMLが変わると壊れる) | 中〜高 | 無料(トラブル時の責任は自分) |
表の上4行で手に入るデータなら、スクレイピングは要りません。サイト別の確認結果は第3章、用途別の選び方は第9章で扱います。
投資分析のためにデータを集めたい——その気持ちはよく分かります。ですが Python 経験者ほど、いきなり requests でHTMLを取りに行く前に、立ち止まる習慣をつけてほしいのです。本記事の基本方針は1つです。公式の手段(API・ライブラリ・正規のダウンロード)で取れるデータは、必ずそちらを使う。スクレイピングは「どうしても他に手段がないとき」の最後の選択肢です。
株価データに限れば、前回のyfinanceで株価データを取得するで見たとおり、yfinance を使えば日本株・米国株・ETFを手軽に取得できます(非公式ライブラリで、研究・教育・個人利用が前提です)。わざわざ規約がグレーなスクレイピングをする理由はありません。それでもスクレイピングの技術と判断軸を学ぶ価値はあるので、本記事では「安全に・責任を持って行うための知識」を整理します。
自分自身の保有データについても、スクレイピングより先に正規の手段があります。証券会社の口座には保有銘柄をCSVで書き出すエクスポート機能があることが多く、それを読み込めば十分です。この手順は第3回証券会社CSVを pandas で読み込むで扱っています。連載全体の流れは投資×Python シリーズ一覧を参照してください。
2. 主要な株価サイトは禁止されている
意外に知られていませんが、日本の主要な株価・金融情報サイトの多くは、スクレイピング(プログラムによる自動取得)を明確に禁止しています。「ブラウザで見られるのだから取得していい」は誤解です。代表例を挙げます。
| サイト | スタンス | 正規の代替 |
|---|---|---|
| Yahoo!ファイナンス | スクレイピング禁止(公式ヘルプ「掲載情報の自動取得(スクレイピング)は禁止しています」に明記。システムへの過度の負荷で、安定したサービス提供に支障をきたすおそれ) | 「VIP倶楽部」の時系列データダウンロード/yfinance |
| みんかぶ | 利用規約でスクレイピング等の機械的取得を禁止(利用規約 第7条 禁止事項)。私的使用の範囲を超えた蓄積・再配布も不可 | 公式の提供範囲を確認 |
| 株探(かぶたん) | 公式ヘルプでシステムによる自動取得を禁止(株探ヘルプ「株探の掲載情報をシステムで自動的に取得することは禁止しております」)。私的使用の範囲を超えた利用も不可 | J-Quants API(取引所の公式データ) |
いずれも表のリンク先の一次情報で確認できます(2026年9月28日確認)。Yahoo!ファイナンスは禁止の理由に「システムに過度の負荷がかかり、安定したサービス提供に支障をきたす恐れ」を挙げ、株価データには「VIP倶楽部」の時系列データダウンロードを案内しています。みんかぶは利用規約の第7条で「本サイト公認以外の方法による、プログラム、スクレイピング等により本サイトのコンテンツを機械的に取得する行為」を禁じています。株探と各サイトの robots.txt は次章の早見表にまとめました。「規約に書いてあるか」を自分の目で確かめる——それがスクレイピングを検討する第一歩です。
本記事は、これらの禁止サイトをスクレイピングする方法を教えるものではありません。規約で禁止されている以上、手順を示すこと自体が違反の助長になります。株価が欲しいなら yfinance や公式の正規手段を使ってください。以降の技術解説は、スクレイピングが明示的に許可された練習用サイトで行います。
3. サイト別:規約とrobots.txtの早見表(2026年9月28日確認)
スクレイピングの可否がよく検索される5サイトについて、利用規約(または公式ヘルプ)と robots.txt を2026年9月28日に確認しました。規約は要旨のみなので、正確な文言はリンク先で確認してください。
| サイト | 利用規約・公式ヘルプ | robots.txt | 本記事の扱い | 正規の代替 |
|---|---|---|---|---|
| Yahoo!ファイナンス | 公式ヘルプで自動取得(スクレイピング)を禁止 | Disallow は /portfolio・/my など5行。株価ページは対象外 | 行わない(ヘルプの禁止が優先) | VIP倶楽部の時系列データ/yfinance |
| みんかぶ | 利用規約第7条(18)で機械的取得を、(19)で私的使用の範囲を超えた蓄積を禁止 | Allow: /。Disallow は会員機能など一部のパスのみ(GPTBot だけ全拒否) | 行わない(規約が優先) | 公式の提供範囲を確認 |
| 株探(かぶたん) | 公式ヘルプでシステムによる自動取得を禁止 | Disallow は /94446337/ と /search* の2行、ほかに Crawl-delay: 3。株価ページは対象外 | 行わない(ヘルプの禁止が優先) | J-Quants API |
| TDnet(適時開示情報閲覧サービス・JPX) | 閲覧サービス上に規約ページは見当たらない | User-agent: * に Disallow: /(全パス拒否) | 行わない(robots.txt が全面拒否) | TDnet API/J-Quants の適時開示アドオン(有料) |
| Stooq(ポーランドの金融データサイト) | 利用規約(英語)に自動取得を名指しで禁じる条項は見当たらない。5.3で同意のない再配布は不可、6.1でS&P指数データは個人・非商用に限定 | 置かれていない(404) | コード例は扱わない | yfinance/J-Quants API |
読み取り方:robots.txt で拒否されていなくても、取ってよいとは限らない
いちばん大事なのは、Yahoo!ファイナンス・みんかぶ・株探の3サイトとも、robots.txt では株価ページを拒否していない点です。それでも規約やヘルプでは自動取得を禁止しています。「can_fetch() が True だったから取得した」は、この3サイトでは禁止に反します。robots.txt はクローラ向けの指示で、データ利用の許諾ではありません。
反対の例が TDnet です。規約の明文は見つかりませんでしたが、robots.txt が全パスを拒否しています。どちらか一方でも拒否していれば行わない(第4章)ので、答えは「取得しない」です。正規ルートは第9章で紹介します。
判断が分かれやすいのが Stooq です。自動取得の明示的な禁止は見当たりませんが、禁止が書かれていないことと、許可が明示されていることは別です。同意のない再配布も不可なので、本記事ではコードを載せず、手作業で入手したデータを自分の分析だけに使う範囲を勧めます。
規約や robots.txt は改定されます。表は2026年9月28日時点の確認結果なので、実施前に必ず最新版を確認してください。株探・TDnet の2行は2026年10月26日にも再確認し、内容に変更はありませんでした(次の節)。本表は公開情報を読んだ結果の整理で、法的助言ではありません。
TDnet・株探のスクレイピングは禁止?規約の確認結果(2026年10月26日確認)
結論:TDnet(適時開示情報閲覧サービス)には規約ページが見当たりませんが、robots.txt が全パスを拒否しています。そのため本記事では取得しない方針です。株探は、公式ヘルプでプログラムによる機械的な取得(スクレイピング等)を禁止しており、公開APIの案内も見当たりません。
比較用に、公式APIがある EDINET と J-Quants も並べました。
| サービス | 規約の該当条項 | 自動取得 | 転載・再配布 | 公式の代替 |
|---|---|---|---|---|
| 株探(かぶたん) | 株探利用規約 第4条・第5条/公式ヘルプ | ヘルプで機械的な取得(スクレイピング等)を禁止。規約は第4条(5)で蓄積、(7)でサーバーへの不当な負担を禁止 | 第4条(2)で第三者への提供・再配信を禁止。第5条で私的使用の範囲を超えた使用は不可 | 株探の公開APIの案内は見当たらない。取引所データは J-Quants API |
| TDnet(適時開示情報閲覧サービス) | 閲覧サービス上に規約・注意事項のページは見当たらない。運営元JPXのサイトには「サイトのご利用上の注意と免責事項」がある | robots.txt が全パス拒否。JPXの注意書きは「高頻度・高負荷に繋がる可能性のある自動取得等」を「ご遠慮」としている | JPXの注意書きは許諾のない二次利用・再配信を不可としている(閲覧サービスへの適用は明記なし) | TDnet API/J-Quants の適時開示アドオン(いずれも有料・第9章) |
| EDINET(金融庁・比較用) | EDINET利用規約 2.2・3.2(2025年4月25日改訂版) | Webサイトからの機械的取得は禁止(2.2)。ただしAPI機能の利用は除外。APIでも短時間の大量アクセスは禁止(3.2) | PDL1.0に準拠した条件で利用でき、出典の記載が必要(I・1.1) | EDINET API v2(APIキーが必要) |
| J-Quants API(JPX・比較用) | J-Quants APIサービス利用規約 第8条・第11条 | 公式APIとして提供。第11条(5)でシステム等への過度な負荷を禁止 | 第8条で登録ユーザーの私的使用に限定。インターネット上での配信など第三者が使える状態にすることや、商用・学術目的での利用は私的使用に当たらない | (公式APIそのもの) |
株探:利用規約の本文に「スクレイピング」という語はありません。自動取得の禁止をはっきり書いているのは公式ヘルプで、「株価やその他のデータをプログラムなどを使用して機械的に取得する行為」を禁止しています。規約側は第4条で「コンテンツ等を蓄積する行為」(一時的な蓄積を除く)や「サーバーに不当な負担をかける行為」を禁じています。取得したデータを手元に貯めることも禁止事項に含まれる点に注意してください。会員には、規約一覧にある会員規約・プレミアム規約も適用されます。
TDnet:確認できた事実だけを並べます。閲覧サービスの一覧ページには、利用規約や注意事項へのリンクが見当たりませんでした。robots.txt は Disallow: /(全パス拒否)で、9月28日の確認時と同じです。運営元JPXのサイト(jpx.co.jp)の注意書きは「高頻度・高負荷に繋がる可能性のある自動取得等はご遠慮いただいております」としています。また、JPXの許諾がない二次利用・再配信も不可としています。ただし、この注意書きが閲覧サービスにも及ぶかは、ページ上に明記されていません。
そのため本記事は、規約上の禁止と断定はせず、robots.txt の全面拒否を理由に「取得しない」方針を取ります(第4章の考え方)。これは本記事の運用方針で、法的な判断ではありません。なお、閲覧サービスに載るのは開示日を含めて31日分です(JPX「TDnetの概要」)。過去の開示をさかのぼって集める用途には、もともと向いていません。
正規ルート:適時開示を機械的に集めたいなら、JPXの有料サービスを使います。TDnet API は過去5年間の適時開示を取得でき、公式ページには「第三者に再配信することが可能」と書かれています。費用は月額の基本料7万円(税抜)に、取得件数に応じた情報料が加わります。個人で使うなら、J-Quants の適時開示アドオン(月額11,000円・税込)が候補です。Light(月額1,650円・税込)と合わせて月12,650円(税込)で、TDnet API の基本料だけ(7万円・税抜)と比べても安く済みます(料金は2026年10月26日確認)。ただし、アドオンは法人・学術用途では使えません(JPXのお知らせ)。J-Quants API 自体も、利用規約第8条で登録ユーザーの私的使用に限られます(商用・学術目的や、第三者が使える形での配信は対象外)。業務や研究、公開するサービスで使う場合は、提供元の条件を確認してください。詳しくは第9章にまとめました。
EDINET:決算書類が目的なら EDINET API が代替になります。EDINET の規約は、Webサイトからの機械的な取得を禁止する一方で、API機能の利用は対象外としています。使うにはAPIキー発行画面からアカウントを作成し、APIキーを発行します。筆者はAPIキーでの実行確認ができていないため、本記事ではコード例を載せていません。
規約は改定されるため、実施前に規約本文を確認し、個別の判断は専門家に相談してください。
株価のスクレイピングが「許可」されているサイトはある?
本記事で確認した5サイトには、自動取得を明示的に許可する記述は見当たりませんでした(2026年9月28日確認)。本記事で扱う中で、HTMLのスクレイピングをはっきり認めているのは、quotes.toscrape.com のようなスクレイピング練習用サイト(第8章)だけです。株価が欲しいなら、許可サイトを探すより、提供元が用意した正規の取得手段(J-Quants API・Yahoo!ファイナンス VIP倶楽部の時系列データ、決算書類なら EDINET API)か、非公式の yfinance(個人の研究・学習用途)を使うのが近道です(第9章)。
4. やる前に必ず確認する3つ
あるサイトをスクレイピングしてよいか。判断するために、最低限この3つを順に確認します。1つでも引っかかったら行わないのが安全側の原則です。
| 確認するもの | 見るポイント |
|---|---|
| ① 利用規約 | 「自動取得」「スクレイピング」「クローリング」「複製」「再配布」の禁止条項があるか |
| ② robots.txt | Disallow で対象パスがブロックされていないか(第6章でプログラム確認) |
| ③ 法令・権利 | 著作権・データベースの権利、取得データの用途(私的利用か再配布か) |
順番が大切です。robots.txt が許可していても、利用規約が禁止していれば行ってはいけません。robots.txt は「クローラ向けの技術的な指示」であって、規約という契約より上位ではないからです。「規約 → robots.txt → 法令」の3点セットで判断します。図にすると、次のようなフローになります。
5. スクレイピング禁止か確認する方法:規約の探し方5ステップ
前章の3点のうち、見落としやすいのが①の利用規約です。禁止の文言が規約本体ではなくヘルプ記事にあることもあるため、次の5ステップで確認します。
- フッターの「利用規約」「ご利用にあたって」「Terms」を開く: 規約が複数(サイト全体・会員・データ提供など)に分かれていれば全部開きます
- 規約内をページ内検索(Ctrl+F)する: 「スクレイピング」「機械的」「プログラム」「自動」「クローラ」「蓄積」「複製」「再配布」で探します(みんかぶの規約は「機械的に取得する行為」という書き方です)
- ヘルプ・FAQも検索する: Yahoo!ファイナンスと株探は、規約とは別のヘルプ記事で禁止を明示しています。規約だけ見て終わらないようにします
- robots.txt を確認する:
https://ドメイン/robots.txtをブラウザで開くか、第6章のコードで判定します - 公式API・CSVダウンロードが無いか探す: 提供されていればそちらを使います
禁止の文言が見つからなくても「書いていない=許可」ではありません。Stooq(第3章)のように、自動取得に触れず再配布を禁じる規約もあります。迷ったら運営者に問い合わせるか、行わないことを選んでください。
スクリプトからのアクセスを 403 で断るサイトもある
2026年9月28日に、独自の User-Agent を名乗った Python(urllib)で各サイトの robots.txt を取得したところ、minkabu.jp と kabutan.jp は HTTP 403(アクセス拒否)を返しました。同じURLはブラウザでは表示されます。プログラムからのアクセスを入口で断るサイトもある、ということです。
このとき User-Agent をブラウザのものに書き換えて回避するのはやめましょう。第7章の作法「ブラウザのふりをしない」に反し、自動取得を望まないというサイトの意思表示を無視することになります。
Python 3.12 の urllib.robotparser は、robots.txt の取得で 401・403 が返ると全パス禁止として扱い、can_fetch() は False を返します。404 なら逆に全パス許可です(第6章)。Python 3.12.10 で、HTTPエラーを模擬して確認しました。
6. robots.txt をプログラムで確認する
robots.txt は、サイトが「どのパスをクローラに許可/拒否するか」を示すファイルです(例: https://example.com/robots.txt)。Python標準ライブラリの urllib.robotparser で機械的に判定できます。ここでは robots.txt が実在するサイトとして、python.org を例にします(https://www.python.org/robots.txt をブラウザで開くと Disallow の記述を実際に確認できます)。
from urllib.robotparser import RobotFileParser
rp = RobotFileParser()
rp.set_url("https://www.python.org/robots.txt")
rp.read()
# 指定UAで、そのURLを取得してよいか
ua = "MyResearchBot/1.0"
print(rp.can_fetch(ua, "https://www.python.org/")) # True(トップは許可)
print(rp.can_fetch(ua, "https://www.python.org/webstats/")) # False(Disallow指定あり)
can_fetch() が False を返すパスには、アクセスしないのが原則です。なお robots.txt には Crawl-delay(アクセス間隔の指定)が書かれていることもあります。その場合は指定された秒数以上の間隔を必ず空けます。robots.txt は「許可の証明書」ではなく「最低限の境界線」だと考えてください。
すべてのサイトが robots.txt を置いているわけではありません。robots.txt が 404(存在しない)のサイトでは、RobotFileParser は「制限なし=全パス許可」として扱い、can_fetch() は True を返します。ただしこれは「robots.txt が無い=何をしてもよい」という意味ではありません。robots.txt はあくまで技術的な指示にすぎず、利用規約が自動取得を禁止していれば、robots.txt の有無にかかわらず行ってはいけません。robots.txt が無いときこそ、規約と法令の確認がいっそう重要になります。
複数サイトをまとめて確認する(実行結果つき)
複数サイトを確認するときは、robots.txt と判定したいURLを辞書にまとめます。例は python.org と TDnet の閲覧サービスです。
import time
from urllib.robotparser import RobotFileParser
UA = "MyResearchBot/1.0"
TARGETS = {
"https://www.python.org/robots.txt": ["https://www.python.org/", "https://www.python.org/webstats/"],
"https://www.release.tdnet.info/robots.txt": ["https://www.release.tdnet.info/inbs/I_main_00.html"],
}
for robots_url, urls in TARGETS.items():
rp = RobotFileParser()
rp.set_url(robots_url)
rp.read()
for url in urls:
print(f"{rp.can_fetch(UA, url)!s:5} {url}")
print(f" crawl_delay={rp.crawl_delay(UA)}")
time.sleep(3)
実行結果(Windows 11 / Python 3.12.10・2026年9月28日)は次のとおりです。
True https://www.python.org/
False https://www.python.org/webstats/
crawl_delay=None
False https://www.release.tdnet.info/inbs/I_main_00.html
crawl_delay=None
TDnet は Disallow: / なので閲覧ページも False です。このコードが通信するのは robots.txt だけで、ページ本体には一度もアクセスしません。False のURLは取りに行きません。
crawl_delay=None は Crawl-delay の指定が無いという意味で、指定があれば秒数が返ります。Yahoo!ファイナンス・みんかぶ・株探を例に入れていないのは、判定結果にかかわらず規約やヘルプで自動取得が禁止されているからです(第3章)。robots.txt だけで判定すると Yahoo!ファイナンスは True になり、みんかぶと株探は第5章の403により False になりますが、どちらの場合も取得はしません。このコードは規約確認の代わりにはなりません。
7. 責任ある実装の作法
規約・robots.txt をクリアし、許可された対象だけを取得する——その前提で、サーバーに迷惑をかけない実装の作法を押さえます。これは「相手のサイトを壊さない」ためのマナーであると同時に、自分を業務妨害のリスクから守るためでもあります。
- アクセス間隔を空ける: 連続リクエストの間に
time.sleep()を入れる(最低でも数秒。robots.txt のCrawl-delay以上) - 素性を名乗る:
User-Agentに連絡先を含めた独自名を設定し、ブラウザのふりをしない - 取得は最小限に: 必要なページだけ。全件巡回や高頻度の再取得をしない
- キャッシュする: 一度取ったデータはローカル(SQLite等)に保存し、同じページを何度も叩かない
- エラー時は止まる: 4xx/5xx が返ったら即座にリトライせず、間隔を空けるか中止する
とくにアクセス頻度は重要です。短時間に大量のリクエストを送ると、相手から見れば攻撃(DoS)と区別がつきません。「人がブラウザで見るより明らかに遅いくらい」を目安にしましょう。間隔を空けて少しずつ取得する処理は、実行に時間がかかるぶんPCを起動したまま待つ場面も出てきます。常時稼働で回すなら、静音・省電力の環境を選んでおくと快適です(Python学習・開発向けのPC選びも参考にしてください)。「取得は最小限・キャッシュする」を定期実行の形で守る実装例は第14回定期実行(Task Scheduler)で株価を毎日自動取得にあります。1日1回だけ取得し、SQLiteに重複なく貯める処理です。
8. 練習:許可されたサイトで手を動かす
技術自体は、スクレイピングの練習用に公開されているサンドボックスで学びます。quotes.toscrape.com はその代表例です。ここで requests(取得)と BeautifulSoup(解析)の基本を確認します。ライブラリの位置づけはよく使うPythonライブラリ51選も参照してください。
pip install requests beautifulsoup4
import time
import requests
from bs4 import BeautifulSoup
URL = "https://quotes.toscrape.com/page/1/"
HEADERS = {"User-Agent": "MyResearchBot/1.0 (contact: you@example.com)"}
res = requests.get(URL, headers=HEADERS, timeout=10)
res.raise_for_status() # 4xx/5xx なら例外
soup = BeautifulSoup(res.text, "html.parser")
for q in soup.select(".quote"):
text = q.select_one(".text").get_text(strip=True)
author = q.select_one(".author").get_text(strip=True)
print(f"{author}: {text}")
time.sleep(3) # 次のページへ行くなら間隔を空ける
ポイントは HTML構造に依存する点です。select(".quote") のように CSS セレクタで要素を取りますが、サイト側のHTMLが変われば途端に壊れてしまいます。スクレイピングが「壊れやすい」のはこのためで、公式APIがあるなら、APIのほうが安定します。取得したデータを pandas に渡せば、前回のyfinance記事と同じ分析の流れにそのまま乗せられるのも利点です。BeautifulSoupやpandasを腰を据えて学びたいなら、体系立ったPython学習・データ分析の書籍を1冊手元に置くと、壊れにくいコードの書き方まで含めて理解が深まります。
スクレイピングの前に「公式の取得手段」を探す
「スクレイピングするしかない」と思い込む前に、公式の取得手段を探します。探す場所は主に3つです。
- 公式API・開発者ページ: フッターやヘルプに「API」「Developers」のリンクがないか
- 公的データポータル: 経済・金融指標なら、日本の
e-Stat(政府統計)や米国のFRED(連邦準備制度の経済データ)など、各サイトの利用規約の範囲で再利用できる公式データが豊富です。企業の財務データなら金融庁のEDINETが API と XBRL 形式で公開しています - 専用ライブラリ: 株価の yfinance のように、取得を肩代わりするラッパーが既にあることが多いです
投資分析に必要なデータの大半は、正規の手段で手が届きます。具体的な手段は次章で用途別に整理します。
9. 株価データを正規に取得できる手段:yfinance・J-Quants・EDINET
スクレイピング自体が要らなくなる取得手段です(yfinance は非公式ライブラリ、J-Quants API と EDINET API は公式API)。料金・条件は、特記のないものは2026年9月28日時点の公式情報です。
yfinance:APIキー不要で日本株の日足を取る
yfinance は Yahoo! Finance のデータを取得するオープンソースのライブラリで、Yahoo, Inc. とは無関係の非公式ライブラリ(研究・教育・個人利用向け)です。登録もAPIキーも不要です(pip install yfinance)。
import yfinance as yf
print("yfinance", yf.__version__)
df = yf.Ticker("7203.T").history(start="2026-09-14", end="2026-09-27")
print(df[["Close", "Volume"]])
print(len(df), df.index.tz)
実行結果(Windows 11 / Python 3.12.10 / yfinance 1.7.0・2026年9月28日取得・トヨタ自動車 7203.T)です。
yfinance 1.7.0
Close Volume
Date
2026-09-14 00:00:00+09:00 3025.0 22994300
2026-09-15 00:00:00+09:00 3021.0 19958900
2026-09-16 00:00:00+09:00 3016.0 17508600
2026-09-17 00:00:00+09:00 3034.0 20929600
2026-09-18 00:00:00+09:00 3025.0 46568200
2026-09-24 00:00:00+09:00 2969.0 33817300
2026-09-25 00:00:00+09:00 2989.5 21084000
7 Asia/Tokyo
- 休場日は行ごと無い: 9月19日〜23日は土日と祝日(敬老の日・国民の休日・秋分の日)なので行が出ません
endの日は含まれない: 同じ日にend="2026-09-25"で実行すると、最終行は9月24日でした- 日付はタイムゾーン付き: index は
Asia/Tokyoです。タイムゾーンの無い日付と比べるときは扱いをそろえます(Python 日付・時刻チートシート)
詳しい使い方は第1回yfinanceで株価データを取得するで解説しています(第1回は yfinance 1.4.1 で検証。書き方は同じです)。株価は取得時点の値でデータ元の修正により変わることがあり、売買の推奨や市場データの再配布を目的としたものではありません。
J-Quants API:取引所(JPX)公式のデータ
J-Quants API は、JPX(日本取引所グループ)が個人投資家向けに提供するデータ配信サービスです。無料プランでも上場銘柄一覧・株価四本値・財務情報のサマリーなどを取得できます(直近12週間を除く過去2年分・APIの呼び出しは1分あたり5回まで)。有料は Light 月額1,650円(税込・過去5年分)からです。
注意点は2つです。無料プランはデータが12週間遅れなので直近の株価は取れません。また、取得データそのものを閲覧できる形で配布・シェアすることと、分析結果を継続・反復して第三者に提供・配信することは禁止と公式サイトにあります(2026年9月28日確認)。APIキーが必要で実行確認ができないため、コードは載せず公式のAPIリファレンスに譲ります。
EDINET API:有価証券報告書などの開示書類
金融庁の EDINET API を使うと、有価証券報告書などの開示書類の一覧と書類本体(XBRL など)を取得できます。無料のアカウント登録でAPIキーを発行します。仕様はEDINET API仕様書(Version 2)を参照してください(コードは同じ理由で省略)。
適時開示を自動で集めたいなら:TDnet API と J-Quants の適時開示アドオン
- TDnet API(JPX総研): 過去5年分の適時開示情報をAPIで取得。月額の基本料7万円(税抜)に、その月の取得件数に応じた情報料が加わります(JPX公式ページ)
- J-Quants API の適時開示(TDnet)アドオン: 2026年5月に提供開始。有料プラン(Light以上)に追加して契約し、過去5年分の適時開示の一覧と開示ファイルを取得できます。料金は月額11,000円(税込)で、Light(月額1,650円・税込)と合わせて月12,650円です(料金は2026年10月26日確認・JPXのお知らせ)。法人・学術用途では使えません
用途別の早見表
| やりたいこと | 使う手段 |
|---|---|
| 個人の分析用に日々の株価を取る | yfinance |
| 公式データで過去の株価・財務を取る | J-Quants API |
| 有価証券報告書・決算書類を取る | EDINET API |
| 適時開示を自動で集める | TDnet API/J-Quants の適時開示アドオン(有料) |
| 自分の保有銘柄を取り込む | 証券会社のCSVエクスポート(第3回) |
どれにも当てはまらないデータだけが、スクレイピングを検討する対象です(第5章の手順で確認してから)。
10. 知っておくべき法的背景
スクレイピングは「即・違法」ではありませんが、やり方次第で複数の法的リスクに触れ得ます。代表的な論点を、過度に怖がらず、しかし軽視もせずに押さえておきましょう。
| 論点 | 注意点 |
|---|---|
| 利用規約違反 | 規約は運営者との契約。違反は契約違反となり、アクセス遮断や損害賠償請求の根拠になり得る |
| 著作権・データベース | 記事本文や編集された情報には著作権がある。複製・再配布は権利者の許諾が必要 |
| 業務妨害 | 過度なアクセスでサーバーに負荷をかけると、業務妨害と評価されるおそれ |
関係し得る法令をおおまかに挙げると、記事本文や編集された情報には著作権法が関わり、複製・再配布には権利者の許諾が必要になる場面があります。過度なアクセスでサーバーを機能不全にすれば刑法(電子計算機損壊等業務妨害・偽計業務妨害)、ログイン後の領域を突破するような取得なら不正アクセス禁止法が問題になる余地があります。どの法令にどう当たるかは事案ごとに大きく異なり、ここでは網羅も断定もできません。個別の判断が必要なら、必ず専門家(弁護士)に相談してください。
「ブラウザで見られる情報なら自由に集めていい」という直感は、法的には通用しません。取得してよいか、取得したデータをどう使ってよいか(私的利用か、公開・再配布か)は別問題です。判断に迷うグレーなケースは「行わない」が最も安全で、投資データに関しては公式手段がそろっているので、わざわざリスクを取る必要はありません。
11. よくある質問(FAQ)
スクレイピングの可否でよくいただく質問をまとめました。
Q. スクレイピングは違法ですか?
行為そのものが一律に違法なわけではありません。ただし、利用規約違反・著作権侵害・過度なアクセスによる業務妨害など、やり方によっては法的責任を問われ得ます。「規約・robots.txt・法令」を確認し、グレーなら行わないのが安全です。
Q. 株価のスクレイピングが許可されているサイトはありますか?
本記事で確認した Yahoo!ファイナンス・みんかぶ・株探・TDnet・Stooq には、自動取得を明示的に許可する記述は見当たりませんでした(2026年9月28日確認)。株価を自動で取るなら、提供元が用意した正規の取得手段(J-Quants API)か、非公式の yfinance(個人の研究・学習用途)を使ってください。手作業のダウンロードでよければ Yahoo!ファイナンス VIP倶楽部の時系列データもあります。決算書類なら EDINET API です。
Q. Yahoo!ファイナンスやみんかぶの株価は取得できますか?
これらはスクレイピングを禁止しています(Yahoo!ファイナンスは公式ヘルプに明記、みんかぶは利用規約第7条で機械的取得を禁止)。スクレイピングではなく、yfinanceや各社の正規手段を使ってください。本記事もこれらサイトの取得方法は扱いません。
Q. 株探のスクレイピングは禁止ですか?
はい。株探は公式ヘルプ(2025年1月27日更新)で、掲載情報をシステムで自動的に取得することを禁止しています(2026年9月28日確認・10月26日再確認)。robots.txt の Crawl-delay: 3 は「間隔を空ければ取ってよい」という意味ではなく、ヘルプの禁止が優先します。公式データなら J-Quants API を検討してください。利用規約の条項(第4条・第5条)は第3章の確認結果にまとめました。
Q. TDnet(適時開示情報閲覧サービス)はスクレイピングできますか?
TDnet の閲覧サービスは robots.txt で全パスを拒否(Disallow: /)しているため、本記事では自動取得しない判断です(2026年9月28日確認・10月26日再確認)。適時開示を機械的に集めるなら JPX の有料サービス(TDnet API、J-Quants API の適時開示アドオン)を、決算書類なら EDINET API(無料登録)を検討してください。JPX の注意書きとの関係は第3章の確認結果で整理しています。
Q. Stooq はスクレイピングしてよいですか?
Stooq の利用規約に自動取得を名指しで禁じる条項は見当たりませんが、同意のない再配布は認められておらず、robots.txt もありません(2026年9月28日確認)。明示の許可ではないため本記事では勧めず、コード例も載せていません。使うなら手作業で入手したデータを自分の分析だけに使う範囲にとどめてください。
Q. robots.txt で許可されていれば、自由にスクレイピングしていいですか?
いいえ。robots.txt はクローラ向けの技術的な指示で、利用規約より上位ではありません。robots.txt が許可していても、規約が自動取得を禁止していれば行ってはいけません。両方クリアして初めて検討できます。
Q. 投資データを取りたいだけなら、何を使えばいいですか?
株価・ETF・為替はyfinanceで取得できます。取引所の公式データが必要なら J-Quants API、有価証券報告書などの書類なら EDINET API です(第9章)。保有データは証券会社のCSVエクスポート(第3回証券会社CSVを pandas で読み込むで解説)を使います。スクレイピングに頼らず、公式に提供された手段で十分にポートフォリオ管理アプリは作れます。
Q. APIとスクレイピング、どちらを使うべきですか?
公式APIがあるなら必ずAPIです。APIは利用が許諾されており、データ構造が安定していて壊れにくく、規約も明確です。スクレイピングはHTML構造の変化で壊れやすく、規約リスクも伴うため、APIが無い場合の最後の手段と考えてください。
- 株価を正規の手段で取る → 第1回 yfinanceで株価データを取得する
- 自分の保有データを取り込む → 第3回 証券会社CSVを pandas で読み込む
- 連載の全体像 → 投資×Python シリーズ一覧
本記事は、生成AIを活用して下書きし、運営者が内容を確認・編集したうえで公開しています。本記事は一般的な情報提供を目的としたもので、法的助言ではありません。スクレイピングの可否は各サイトの規約・状況により異なるため、実施前にご自身で確認してください。AIの利用方針は免責事項をご覧ください。