今回は、競馬データをスクレイピングしてウェブサイトから簡単に情報を取得する方法をご紹介。
GoogleスプレッドシートとGASを活用して、手軽に競馬データの収集する方法を本記事ではまとめています。
競馬ファンの方々やデータ収集・分析に興味がある方々向けにまとめていますのでぜひ最後までご覧になってください。
スクレイピングに関する注意点
本記事で紹介しているスクレイピング方法は、必ず自己責任で行ってください。
スクレイピングによっては、対象サイトの利用規約に抵触したり、サーバーに過剰な負荷をかけて迷惑をかけてしまうリスクがあります。
スクレイピングを行う際のチェックポイント
- 利用規約の確認:対象サイトの利用規約を必ず確認し、スクレイピングが許可されているかを確認しましょう。
- アクセス頻度の調整:短時間に大量のリクエストを送信するとサーバーに負担がかかります。適度なインターバルを設定し、アクセスを分散させるよう工夫してください。
- 事前の許可:商用利用や大量データの取得が必要な場合は、サイト運営者に事前に許可を取ることが望ましいです。
スクレイピングは適切に利用すれば非常に便利な技術ですが、使用方法を誤ると法律的・倫理的な問題につながることがあります。トラブルを避けるためにも、以上のポイントを守って安全に活用しましょう。
スクレイピングとは
スクレイピングとは、ウェブページから情報を抽出する技術のこと。
この技術を使えば、ウェブサイトのデータを自動取得できます。
取得したデータは、自由に加工して分析に利用も可能です。
GASを利用すればスクレイピングも簡単に可能
通常では、高い技術が必要なスクレイピングですがGoogle Apps Script(GAS)を利用すれば比較的簡単に使えます。
そもそもGASとは何かという方のためにGASについておさらいしましょう。
GASって何?
GAS(Google Apps Script)は、Google Workspaceの機能を拡張し、カスタマイズするためのスクリプト言語です。
基本的な使い方や構文を理解することで、スプレッドシートをデータベースのように活用できます。
主な特徴は、以下になります。
作成から実行がすぐにできる
GASは、スクリプト言語と呼ばれるコンパイルをせずに即時実行、展開できる言語。
JAVA言語などのコンパイル言語では、コンパイルと呼ばれるソースコードをアプリに変換する処理が必要です。
GASではそういった変換処理は、一切不要。
作成から修正、実行までのすぐに実施して気軽に改善を行うことができます。
Googleサービスとの連携が簡単
GASは、Googleによって開発されている開発言語になります。
そのため他のGoogleサービス(スプレッドシートやGmail、Googleカレンダーなど)との連携が簡単に行えます。
Googleサービスの機能拡張を図りたい方やGoogleサービスを連携したい方にはおすすめの言語です。
無料で利用可能
GASは、最大の特徴として無料で利用できます。
他のGoogleのサービスであるスプレッドシートやGmail、ドキュメントなどと同様に、GASも無料で利用できます。
追加の費用をかけることなく、さまざまなGoogleサービスとの連携を通じて、自動化やカスタマイズされた機能を作成することが可能。
競馬データをスクレイピングしてデータを分析してみよう!

それでは、GASを利用して競馬データの収集アプリを開発する方法をご紹介していきます。
事前準備、プログラミング、動作確認の流れで説明していきます。
事前準備:取得対象URLの構造を理解しよう
まずは、データ取得元の競馬データサイトを確認します。
今回は、JRAの競馬サイト(https://www.jra.go.jp/datafile/seiseki/)を見てみましょう。
このサイトには、年ごとのレース結果がまとめられているようですね。
年を選択するとその年のレース一覧が表示されレース結果のボタンを押すと個々のレース結果が表示されます。
2024年を選択してみます。

レース結果を選択してみましょう。

レース結果として順位や馬名、騎手名などの情報が一覧で表示されます。

今回はこのレース結果をスクレイピングで一括取得してみようと思います。
ここで重要になるのはURLです。
URLはブラウザの上部に表示されている「http」から始まる文字列です。
インターネット上でのウェブサイトの住所のようなものです。
スクレイピングではURLとHTML構造を参考にして何を取得できるか考えます。
ITツールの匠ストア「GASでWebスクレイピング!競馬データを自動収集してみよう!注意点も解説【ソースコードコピペOK】」はこちら >>
動作確認
作成したツールが正常に動作するか確認してみましょう。
データ取り込みシートにて取込年度を入力して取り込み開始をクリックします。
今回は、2024年を指定してみます。

初回の動作実行時は、権限の確認が表示されます。
指示に従って許可をしておきましょう。



取得結果が「2024」というシートが作成されて競馬結果が格納されていれば成功です。
結構時間がかかるのでしばらく待ちましょう。

応用:検索機能を搭載
今回は、スクレイピングしたデータを検索する機能も応用編として作っていきます。
検索項目は複数あり、競馬場・天候・コース種別・距離・馬名・騎手名など、条件を組み合わせて絞り込みが可能です。
以下のコードをソースの最下行に追記し保存してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// QUERYの条件に入れる前に、文字列を trim()(前後スペース除去)& 全角スペース→半角に変換 function normalize(str) { if (!str) return ""; return str.toString().trim().replace(/ /g, " "); } // 応用編:検索機能 function search() { let ss = SpreadsheetApp.getActiveSpreadsheet(); let sheet = ss.getActiveSheet(); // 各セルからの値を正規化(スペース調整) let place = normalize(sheet.getRange('B1').getValue()); let course = normalize(sheet.getRange('F1').getValue()); let distance = normalize(sheet.getRange('B2').getValue()); let weather = normalize(sheet.getRange('D1').getValue()); let condition = normalize(sheet.getRange('H1').getValue()); let horse = normalize(sheet.getRange('D2').getValue()); let jockey = normalize(sheet.getRange('F2').getValue()); let year = normalize(sheet.getRange('H2').getValue()); let whereQuery = '=QUERY(' + year + '!A:T, "SELECT * WHERE 1=1'; if (place) whereQuery += " AND C = '" + place + "'"; if (course) whereQuery += " AND D = '" + course + "'"; if (distance) whereQuery += " AND E = " + distance; if (weather) whereQuery += " AND F = '" + weather + "'"; if (condition) whereQuery += " AND G = '" + condition + "'"; if (horse) whereQuery += " AND K = '" + horse + "'"; if (jockey) whereQuery += " AND N = '" + jockey + "'"; whereQuery += '", 1)'; sheet.getRange("A5").setValue(whereQuery); } |
normalize() が必要?スプレッドシートでは、見た目が同じに見えるテキストでも「前後に空白がある」「全角と半角が混じっている」などの違いがあると、
=QUERY関数では一致しないことがあります。このnormalize()関数を通すことで、以下のようなトラブルを防止できます:
- 「中山 」←末尾スペースつき → マッチしない
- 「藤岡 佑介」←全角スペース → マッチしない
- 数字を入力したのに、文字列と扱われてエラーになる
正しく絞り込むために、normalize()を含めときましょう。
記入ができたら先程と同様の手順で「検索」シートの検索ボタンにスクリプト割当で search を設定します。

設定が完了したら、検索条件を入力し、「検索」ボタンをクリックしてみましょう。

検索結果が表示されれば成功です。

まとめ

今回は、GASを使ってJRAの競馬データを取得する方法をご紹介しました。
本記事の内容をまとめると以下。
スクレイピングは、人力だと非常に手間な作業を自動的に行ってくれる便利な処理です。
今回取得したJRAの競馬データ以外にも各所の競馬データを取得して分析してみればより信頼度の高い結果を得られるかもしれません。
ぜひ、興味が湧いた方は今回の内容を参考に挑戦してみてください。
ただし必ず自己責任で行ってください。
スクレイピングによっては、対象サイトの利用規約に抵触したり、サーバーに過剰な負荷をかけて迷惑をかけてしまうリスクがあります。



