目的
機械学習で競馬予想して、回収率100%を目指す。
今回やること
netkeiba.comから2019年の全レース結果をスクレイピングする。tableタグがついているデータはpandasのread_htmlを使うと、1行でスクレイピングできるので便利。
pd.read_html("https://db.netkeiba.com/race/201902010101")[0]
ソースコード
netkeiba.comでは1レースごとにrace_idが付与されているので、race_idのリストを入れたらそれぞれのレース結果をまとめてスクレイピングして辞書型で返してくれる関数を作る。
import pandas as pd
import time
from tqdm.notebook import tqdm
def scrape_race_results(race_id_list, pre_race_results={}):
race_results = pre_race_results
for race_id in tqdm(race_id_list):
if race_id in race_results.keys():
continue
try:
url = "https://db.netkeiba.com/race/" + race_id
race_results[race_id] = pd.read_html(url)[0]
time.sleep(1)
except IndexError:
continue
except:
break
return race_results
今回は、2019年の全レース結果をスクレイピングしたいので、2019年の全race_idのリストを作る。
race_id_list = []
for place in range(1, 11, 1):
for kai in range(1, 6, 1):
for day in range(1, 9, 1):
for r in range(1, 13, 1):
race_id = (
"2019"
+ str(place).zfill(2)
+ str(kai).zfill(2)
+ str(day).zfill(2)
+ str(r).zfill(2)
)
race_id_list.append(race_id)
スクレイピングできたら、pandasのDataFrame型に変換してpickleファイルで保存する。
results = scrape_race_results(race_id_list)
for key in results:
results[key].index = [key] * len(results[key])
results = pd.concat([results[key] for key in results], sort=False)
results.to_pickle('results.pickle')
次の記事では、BeautifulSoupを用いてレースの日付や天気などの詳しいデータをスクレイピングしています!
また、動画で詳しい解説をしています!
競馬予想で始めるデータ分析・機械学習