【Python】地方競馬のオッズをスクレイピング
以前 Google Apps Script を使って書いた記事の Python 版です。
netkeiba から地方競馬のオッズを、今回は Python を使って取得しようと思います。
1. Requests パッケージを使った方法
コード
race_id = "202254110511"
url = f"https://nar.netkeiba.com/odds/index.html?type=b1&race_id={race_id}"
import requests
from bs4 import BeautifulSoup
response = requests.get(url)
soup = BeautifulSoup(response.content)
odds_tan_block = soup.find('div', attrs={'id': 'odds_tan_block'})
trs = odds_tan_block.find_all('tr')
for n, tr in enumerate(trs):
if n == 0:
continue
horse_name = tr.find("td", attrs={"class": "Horse_Name"}).text
odds = float(tr.find("td", attrs={"class": "Odds"}).text)
print(n, horse_name, odds)
実行結果
2. pandas パッケージを使った方法
シンプルなページのスクレイピングなら pandas パッケージの read_html 関数を使うのが楽です。
コードと実行結果
race_id = "202254110511"
url = f"https://nar.netkeiba.com/odds/index.html?type=b1&race_id={race_id}"
import pandas as pd
tansho_odds_df, fukusho_odds_df = pd.read_html(url)
tansho_odds_df
複勝オッズも取得できています。
fukusho_odds_df
複勝オッズの場合、最低オッズと最高オッズが一繋がりの文字列になっているので、数値として扱うためには分解する必要があります。
コード
fukusho_odds_df['最低オッズ'] = fukusho_odds_df['オッズ'].map(lambda x: float(x.split('-')[0]))
fukusho_odds_df['最高オッズ'] = fukusho_odds_df['オッズ'].map(lambda x: float(x.split('-')[1]))
fukusho_odds_df.drop('オッズ', axis=1, inplace=True)
fukusho_odds_df
実行結果
この記事が気に入ったらサポートをしてみませんか?