競馬情報の自動取得(その①)

こんな依頼をいただきました

下記のサイトから昨年1年間のレース情報を取得したいです。
※可能であれば数年間分
競馬場名、何レース、芝/ダート、距離、馬の名前、騎手、人気、着順
等々を1頭ごとにcsvにしたいなぁと思う次第です。

ではさっそくスクレイピングのスタート

1年間のすべてのレースという事ですが、基本となるのは1レース分のデータをきれいにとってくることです。ここさえ出来るようになれば、あとはグルグル回すだけで出来そう。さっそく適当なレースのページを開いてみます

https://race.sp.netkeiba.com/?pid=race_result&race_id=202105010601

画像1

ふむ、まずはこのページを開くようにします。

url="https://race.sp.netkeiba.com/?pid=race_result&race_id=202105010310"
from time import sleep
from selenium import webdriver
import re
driver = webdriver.Firefox()
driver.get(url)

urlのところは後で変更していきますが、まずは適当にレースのurlを決めて表示させます。

ブラウザーはchromeを以前は使っていたのですが、バージョンアップ頻度が高く、バージョンが上がるたびにドライバー取ってこないといけないので、だんだん嫌になってきて最近はFirefoxを使っています。Firefoxで特に不満はないのですが、デフォルトだとログファイルをガンガン吐き出しますので、長く回すときには注意が必要です。ログをはかせたくなかったら次のように記述する必要があります。

driver = webdriver.Firefox(log_path=os.path.devnull)

さて、1着から3着が表示されていて、4着からは「全着順をクリックする」を押す必要があります。

まずは

画像2

をクリックしなくちゃいけません。

まずはクリック対象を見つけてきます。

WEB画面を開いた後、「右クリック→検証」をクリック

画像4

画面がこんな風に変わりました。真ん中の上にあるマークをクリック

画像5

その次に、マウスを「全着順を見る」にもっていくと、右側の画面が次のようになります。

画像6

ということで、このボタンはClass Button_01であることがわかりました。なのでここをクリックするには driver.find_element_by_class_nameを使ってあげればよいという事が分かります。

driver.find_element_by_class_name('Button_01').click()

実はここで少しつまづきました。起動したPCの画面から「全着順を見る」がはみ出している場合は、ちょっと下にスクロールしてからじゃないと、クリックできません。なのでいきなりクリックしないで

①画面をスクロール

②全着順を見るをクリック

の順番で作ります

zenbumiru = driver.find_element_by_class_name('Button_01')
driver.execute_script('arguments[0].scrollIntoView(true);', zenbumiru) # 対象となる要素までスクロール
driver.execute_script("arguments[0].click();", zenbumiru)

これで、無事クリックされました。

画像3

画面が全部表示されるようになったので、ここからスクレイピングの開始です。



いいなと思ったら応援しよう!