pandas의 read_html을 사용하여 경마 데이터를 스크래핑하는 방법
목적
기계 학습으로 경마 예상하고 회수율 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을 사용하여 레이스 날짜 및 날씨와 같은 자세한 데이터를 스크래핑합니다!
또, 동영상으로 상세한 해설을 하고 있습니다!
경마 예상으로 시작하는 데이터 분석 · 기계 학습
Reference
이 문제에 관하여(pandas의 read_html을 사용하여 경마 데이터를 스크래핑하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dijzpeb/items/434b259e473cc8646e91
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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을 사용하여 레이스 날짜 및 날씨와 같은 자세한 데이터를 스크래핑합니다!
또, 동영상으로 상세한 해설을 하고 있습니다!
경마 예상으로 시작하는 데이터 분석 · 기계 학습
Reference
이 문제에 관하여(pandas의 read_html을 사용하여 경마 데이터를 스크래핑하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dijzpeb/items/434b259e473cc8646e91
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
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)
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')
Reference
이 문제에 관하여(pandas의 read_html을 사용하여 경마 데이터를 스크래핑하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dijzpeb/items/434b259e473cc8646e91텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)