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

WEBの自動化をコツコツ勉強しています。書きながら困った事、うまくいったことを書いていきます。第2回目は前回の続き、競馬情報の抜き出しです。まずは以下の部分を取り込んでいきたいと思います。

画像1


要素を見つけるにはChromeをひらいて

右クリック→検証を押して右側に現れるウインドウを調べていきます。どこがその要素に当たるのかを探すのは、前回のnoteに書きましたので、そこは省略。

classname Race_Nameで抽出すると

driver.find_element_by_class_name('Race_Name').text

の値が

'テレビ山梨杯 2勝クラス'

となっています。これでいいや!と思っていたのですが、依頼主に確認したところ、テレビ山梨杯で1つ、2勝クラスで1つにしてほしいとのこと。ふむふむ、そうなんですなあ、という訳でsplit()を使ってスペースで2つに分けます

driver.find_element_by_class_name('Race_Name').text.split()

こうすれば、2つに分かれてくれます

['テレビ山梨杯', '2勝クラス']

こんな感じですね。

その下の文字列は全部1つのクラスに入っています

driver.find_element_by_class_name('Race_Data').text

で抽出するとこんな情報が出てきました

'15:10 芝1400m (左) 16頭 晴\n良'

これを分解して別々のパラメータに代入していきます

race_data=driver.find_element_by_class_name('Race_Data').text

としてrace_dataを分解していきます

最初の時間はレースの開始時間

race_time=race_data[0:5]

次の一文字はダートか芝か

race_field=race_data[6]

次が距離とどっち周りか

race_length=race_data[7:race_data.find('m')]

次が馬数

race_umasu=race_data[re.search(r'\) ',race_data).end():race_data.find('頭')]

次が天気

ace_tenki=race_data[race_data.find('頭')+2]

そして馬場コンディション

race_condition=race_data[-1]

本当はもっと頭のいい方法があると思うけど、とりあえず、これでいいや

って思ったけど、今もう一度split()で考え直してみる

(最初に書いたときはsplit()があることを忘れていました)

'15:10 芝1400m (左) 16頭 晴\n良'

に対してsplit()を使うと

['15:10', '芝1400m', '(左)', '16頭', '晴', '良']

になるではないか!

[0]はタイム、[1]は1文字で終わらないかもしれないので「0:数字」で正規表現で取ってきた方がよさそう。左か右かも一応なので()はとっていれてたい 16頭は「頭」だけとる

そんなかんじですな

なので、書き換えるとこうなる


最初の時間はレースの開始時間

race_time=race_data[0]

次の一文字はダートか芝か

race_field=race_data[1][1]

多分、芝とダしかないと思うけど2文字来たらここどうしよう

次が距離

race_length=race_data[1][1:race_data.find('m')]

右か左か

race_migihidari=racedata[2][1:-1]


次が馬数

race_umasu=race_data[3][:-1]

次が天気

ace_tenki=race_data[4]

そして馬場コンディション

race_condition=race_data[5]

これでやっとここの抽出が終わりました

画像2

面倒くさそうに見えますけど、一回やれば、2回目からは全部コンピューターにお任せですから、頑張りどころです


この記事が気に入ったらサポートをしてみませんか?