競馬情報の自動取得(その②)
WEBの自動化をコツコツ勉強しています。書きながら困った事、うまくいったことを書いていきます。第2回目は前回の続き、競馬情報の抜き出しです。まずは以下の部分を取り込んでいきたいと思います。
要素を見つけるには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回目からは全部コンピューターにお任せですから、頑張りどころです