スクレイピングで競馬の結果を取得するプログラムをつくります。ちなみに当方、競馬にはまったく興味がありません(当たるはずがないので)。

2020年10月4日 中山1R レース情報のhtmlソースをみると以下のような構造になっていることがわかります。

ここからわかることは

順位は class=”Result_Num” を調べればわかります。class=”Num”はふたつあって最初が枠、次が馬番になっている。 class=”Horse_Name” は馬の名前、 class=”Horse_Info_Detail” は馬の年齢、class=”JockeyWeight”は斤量、class=”Jockey”は騎手の名前、class=”Time”はふたつあって一つ目がタイム、二つ目が着差、class=”Odds”もふたつあって一つ目が何番人気か? 二つ目が単勝オッズ、class=”Tim”は後3F(ゴール前最後の600m(3F)の走破タイム)、class=”PassageRate”はコーナー通過順、class=”Trainer”は厩舎、class=”Weight”は馬体重、そのなかの<small>は増減であることがわかります。

あとは各ページのHTMLソースを取得して解析すれば各データを取得できるということになります。

スクレイピングにはHtmlAgilityPackを使います。HtmlAgilityPackはプロジェクトごとにNuGetから導入します。

ではHtmlAgilityPackを導入したら、さっそくスクレイピングをやってみましょう。

最初にurlからHtmlソースを取得します。これは自作メソッド GetHtmlText(string url)で取得可能です。

次にHtmlAgilityPackをつかって必要な情報を抜き出すのですが、classから抽出することが可能です。

とやれば<tr class=”FirstDisplay HorseList” class=”HorseList”>~<tr>の間を取得することができます。それをさらに

とやれば必要なデータを抜き出すことができます。

着順,枠,馬番,馬名,性齢,斤量,騎手,タイム,着差,人気,単勝オッズ,後3F,コーナー通過順,厩舎,馬体重(増減)をCSVファイルとして保存するには以下のようにすれば可能です。

それからnetkeiba.comではURLは以下のルールで決められているので、開催年、競馬場コード、開催回数、日数、レース数を指定すれば他のレース結果も収集することができます。