■
pythonでJRAのHPからレース結果urlを得て各レースの1着騎手名と人気と配当を得る
from bs4 import BeautifulSoup
import requests
import re
#################################################################################
# urlを渡して指定文字を含むurlを得る関数
def url2urls(url,search_word):
soup = url2soup(url)
match = [a for a in soup.find_all('a') if search_word in str(a)]
urls = [re.findall(r'/JRADB.+/[0-9a-fA-F]{2}', str(a))[0]for a in match]
'重複削除順番維持'
urls = sorted(set(urls), key=urls.index)
if 'CNAME' in urls[0]:
urls = ['https://www.jra.go.jp' + u for u in urls]
return urls
else:
urls = [u.replace("'",'').split(',') for u in urls]
#'/JRADB/accessK.html', 'pw04kmk001019/85',の後にスペースがあることがあるのでstrip
urls = [('https://www.jra.go.jp' + u[0] ,'cname=' + u[1].strip())
for u in urls]
return urls
#################################################################################
# urlを渡しsoupを得る
def url2soup(url):
if len(url) == 2:
return BeautifulSoup(requests.post(url[0], url[1]).content, 'html.parser')
if len(url) != 2:
return BeautifulSoup(requests.get(url).content, 'html.parser')
#################################################################################
# urlを渡し馬場と日付を得る
def srl2bb8yymmdd(srl):
dic = {
'01': '札幌', '02': '函館', '03': '福島', '04': '新潟', '05': '東京',
'06': '中山', '07': '中京', '08': '京都', '09': '阪神', '10': '小倉'
}
return dic[srl[1][15:17]] , srl[1][-11:-3]
################################################################################
# JRAのHPからレース結果urlを得て各レースの1着騎手名と人気と配当を得る
u = 'https://www.jra.go.jp/'
u = url2urls(u,'レース結果')
u = url2urls(u[0],'srl')#uはリストなので要素が一つでも[0]と指定必要
u = u[1]#srlはこの時は49得たので[0]から[48]指定できる
print(srl2bb8yymmdd(u))
u = url2urls(u,'sde')
for s in u:
#[6::7]6列目からステップ7とすることで6列(騎手名)と13列(単勝人気)を得る
name8pop = [td.text for td in url2soup(s).find_all('tr')[1].find_all('td')[6::7]]
win = url2soup(s).find('li', class_="win").find('div' , class_="yen").text
print(name8pop,win)