汎用AIと一緒に競馬予想AI作ってnote投稿まで自動化する #2-スクレイピング

2026年初頭AIの進歩が凄まじく、AIを使った何かをやってみたいと競馬予想AIを作ってみましたのでその取り組みをまとめてみました

ついでにその過程で作ったスクレイピングとnoteへの自動投稿も一緒にまとめますので興味のある方は覗いてみてください

今回は第二回でデータ収集についてまとめています

目次

まずはデータがないと分析できない

AI含め、分析するならデータを手元に持たないと話にならないので過去データの収集から始めます

選択肢としては有料でもいいから正攻法ならJRA-VAN データラボからのデータ取得、無料だけど節度を持ってゆっくりデータを取得するならnetkeibaからのスクレイピングの2つを検討しました

JRA-VAN データラボからのデータ取得

JRA公式データを使うならデータラボ1択

2,090円/月(初月無料)で利用できてJRA関連会社が運営する公式ツールです

https://jra-van.jp/dlb/feature.html

調査も含めて契約してみたのですが、基本はJV-Linkを組み込んだ独自アプリ開発キットのような印象でした

問題は対象言語サポートが2026年3月現在残念でVB系しか対象になっておらず、ちょっと厳しい印象なのは否めません

ネットを見ているとサポート関係なく他の言語で作成している人もいるみたいですが、コミュニティが使えないなど有料の強みがなくなってしまうので今回は諦め

サポート対象言語
  • Microsoft Visual Basic 2015
  • Microsoft Visual C++ 2015
  • Borland Delphi 7
  • Microsoft Access 2013/2016
  • Microsoft Excel 2013/2016

https://support.jra-van.jp/jravan/detail?site=SVKNEGBV&category=16&id=209

ちなみに・・有志が作ったアプリも使えるらしく、不動の1位なTARGETや税金問題で界隈を賑わせた卍氏が使っていたといわれる馬王Zも追加料金なしで使えるようなのでゼロベースからの分析とかじゃないなら十分有力な選択肢になりそうです

卍氏の書籍紹介

2007-2009年の3年間で、1億円以上の価値を得た卍氏の書籍はコチラ

「馬券の勝ち方」を論理的かつ丁寧に解説されてます!

netkeibaからのスクレイピング

結論から言うと今回採用したのはこちら

スクレイピングとはインターネット上の情報をプログラムで収集する手法で、サーバーに負荷をかけてしまうなどあまり推奨される手法ではありませんが、netkeibaは禁止していないようなのと情報として十分すぎる量があり、長く使うなら正直無料はありがたいです

参考までにnetkeibaがスクレイピングを禁止していないと判断した材料はこちら

  • robots.txtがない
    • 禁止している場合はここに記載されていることが多いです
  • 利用規約で禁止していない

ちょっとした注意点

公式データではないからなのか、netkeibaのデータで注意点として極稀に謎のデータが存在します

例えば2014/2/10の東京3Rの結果ページなんですが、明らかに単勝オッズがおかしくなっています

https://race.netkeiba.com/race/result.html?race_id=201405010303

出馬表データの単勝オッズは正しいのでカバーはできますし、発生頻度は激低なのでご愛敬で

スクレイピングについて

具体的なコードは別で紹介しようと思いますが、ここでは方針的なことだけまとめます

※近いうちにnoteでまとめるつもりなので完了したらこの記事でもお知らせします

取得したデータはデータベースへ保存

ネットを見ているとプログラムを実行する度にスクレイピングするような記事を見かけますが、再利用やちょっとした加工の可能性も考えるとデータベースに保管することを推奨です

参考までに私はこのブログサイトのためにエックスサーバーを契約しているので、専用のデータベースを作成して取得した2008年以降のレース結果を保存しています

データは小分けに取得

データベースを使う利点の一つとも言える、取得情報をもとに次の情報を取得が個人的推奨方法

スクレイピングに置いて通信問題などで収集途中で原因不明かつ対策不可能なエラーが発生することは比較的多く、全てにエラーハンドリングを仕込むことはあまり現実的ではないので順番に収集します

  • まずはリスト取得
    1. 開催スケジュール取得
    2. 開催レース取得
  • 次にデータベースと照合しながら未取得情報を収集
    1. レース詳細取得
    2. 騎手マスタ取得
    3. 調教師マスタ取得
    4. 馬主マスタ取得
    5. 競走馬マスタ取得
  • 最後に競走馬マスタを再起処理して血統情報収集

SQLの作り方次第ではありますが、これでエラーが発生しても途中再開が簡単にできるようになります

並列処理はしない

前述の通り利用規約では

スクレイピングによって多数のリクエスト(アクセス)を確認し、弊社サービスに対して支障があると判断した場合は、予告なく通信制限をかけさせていただくことがございます。

と記載されていますので逐次処理で適切に待機時間を入れながら実行することで”多数のリクエスト“を回避することで許容してもらいます

早く情報を収集したい気持ちで並列処理をするとアクセスブロックをされて結果余計に時間がかかる、最悪取得できなくなる可能性もあるので節度を持った処理をしましょう

次回について

なかなか満足できるAIができないので次回はnoteへの自動投稿をまとめる予定です

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAとPythonを中心にユーザー側でできるITを自己学習しているので備忘録半分、学習履歴を残して同じ道を辿る人の参考になればとブログを始めました

副業でスクレイピングツール作成を中心にできることを色々やっていますのでご相談いただけるとありがたいです!


クラウドワークスのページへ


ココナラのページへ

コメント

コメントする

目次