pythonでJRAレース結果urlをリストして保存する

pythonJRAレース結果urlをリストして保存する
年月を指定して「過去レース結果検索」文字列'pw01skl1'を含むリンクを創る
'pw01skl1'リンクのページから「3回阪神2日」とかの文字列'pw01srl'を含むリンクを得る
'pw01srl'リンクのページから「レース結果」文字列'pw01sde'を含むリンクを得る
pickleで「レース結果」リンクを保存する
一年分のリンク約3400個の保存に5から6分かかる

 

 import requests
from bs4 import BeautifulSoup
import re
import pickle
import itertools
from tqdm import tqdm
######################################################################
#urlを渡してページのBeautifulSoupを得る関数   
def url2soup(url):
    arg1 = url[0]
    arg2 = url[1] 
    r = requests.post("https://www.jra.go.jp/"+arg1, data='cname='+arg2)
    r.encoding = 'Shift_jis'
    return BeautifulSoup(r.text, 'lxml') 
######################################################################
#urlを渡してページ内のonclickリンク(指定した文字列を含む)を得る関数
def url2urls(url,search_word):
    soup = url2soup(url)
    match_links_str = [str(link_html) for link_html in soup.find_all('a') 
                    if search_word in str(link_html)]
    match_links_url = [[re.findall(r'/J.+html', s)[0],
                re.findall(r'p.+/[0-9a-fA-F]{2}', s)[0]]
                for s in match_links_str]
    return match_links_url 
######################################################################
#urlを渡してページ内のcname付きリンク(指定した文字列を含む)を得る関数
def url2hrefs(url,search_word):
    soup = url2soup(url)
    match_links_href = ['https://www.jra.go.jp' + link_html.get('href') for link_html in soup.find_all('a') 
                    if search_word in str(link_html)]
    return match_links_href 
######################################################################
#チェックデジット辞書を創る
soup = url2soup(('/JRADB/accessS.html', 'pw01skl00999999/B3'))
ss = [str(s) for s in soup.find_all('script') if 'objParam' in str(s)][0]
yymm = '(?<=\[").+?(?=\"])'#var objParam = new Array();objParam["2301"]="27";objParam["2302"]="F5"
cd = '(?<=\=").+?(?=\")'
yymms = re.findall(yymm, ss)
cds = re.findall(cd, ss)
dict_yymm_cd = dict(zip(yymms,cds))
######################################################################
for yyyy in range(2015 , 2023):
    #年月を指定して「過去レース結果検索」文字列'pw01skl1'を含むリンクを創る
    yyyymms = [str(yyyy) + format(m , '02') for m in range (1 , 13)]
    cdss = [dict_yymm_cd[yyyymm[-4:]] for yyyymm in yyyymms]
    pw01skls = [['/JRADB/accessS.html', 'pw01skl10' + yyyymm + '/' + cd] for yyyymm , cd in zip(yyyymms , cdss)]
    #'pw01skl1'リンクのページから「3回阪神2日」とかの文字列'pw01srl'を含むリンクを得る
    pw01srls = [url2urls(pw01skl , 'pw01srl') for pw01skl in tqdm(pw01skls)]
    pw01srls = list(itertools.chain.from_iterable(pw01srls))
    #'pw01srl'リンクのページから「レース結果」文字列'pw01sde'を含むリンクを得る
    pw01sdes = [url2hrefs(pw01srl , 'pw01sde') for pw01srl in tqdm(pw01srls)]
    pw01sdes = list(itertools.chain.from_iterable(pw01sdes))
    #pickleで「レース結果」リンクを保存する ’pickle\’はフォルダ
    with open('pickle\sdes_cname' + str(yyyy) + '.pkl', 'wb') as web:
        pickle.dump(pw01sdes , web)

pickle読みだし


import requests
from bs4 import BeautifulSoup
import pickle
from tqdm import tqdm

with open('pickle\sdes_cname2022.pkl', 'rb') as web:
    urls = pickle.load(web)
#2022年、年初5レースの勝利騎手、単勝配当を得る
for url in urls[:5]:
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    print(soup.find('td' , class_="jockey").text ,
    soup.find('div' , class_="yen").text)