경마 예상 모델을 만드는 데 selenium을 사용한 스크래핑을 배웠다.
소개
지난번에 계속해서 netkeiba.com으로부터의 경마 데이터를 사용해 예상 프로그램을 만들고 있습니다. 예상 프로그램을 만드는 것보다, 스크래핑의 내용을 배울 수 있었으므로 비망으로 정리합니다.
Pandas를 사용하여 경마 데이터베이스를 검색했습니다.
h tps:// 퀵했다. 소 m/문 OA씨/있어 MS/1c1C429746아3아0아 d055
경마 예상 프로그램 자체는 이쪽의 동영상을 봐 주세요. 매우 정중하게 해설되어 있어 초학자라도 충분히 이해할 수 있습니다.
경마 예상으로 시작하는 데이터 분석 · 기계 학습
htps //w w. 요츠베. 코 m / 짱 l / u CDzw
javascript로 작성된 장소의 스크래핑 (Selenimum 활용)
html
로부터 출주표나 마명, 기수등의 정보를 취할 때에 pandas
를 활용해 취득할 수 있는 것은 전회 정리했습니다. 이것만으로는 충분하지 않을 수 있습니다. javascript
에 기술되어 있는 부분에 대해서는, 스크래핑에 한 번 걸어야 합니다.
Selenium이란?
Selenium
는 웹 브라우저의 조작을 자동화하기 위한 프레임워크입니다. Chrome
에서도 FireFox
에서도, IE
등에서도 사용할 수 있는 것 같습니다. 이번에는 Chrome
를 사용합니다.
여기에서 Chrome
버전 selenium
을 다운로드하십시오.
from selenium.webdriver import Chrome, ChromeOptions
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
URL 열기
간단히 URL을 여는 방법은 다음과 같습니다.
options= ChromeOptions()
driver = Chrome(executable_path=r'(chromedriver.exe)のパスを指定下さい',options=options)
driver.get(url)
여기에 choromedriver
의 path
를 넣습니다. 시스템 환경설정에서 choromedriver
의 path
를 지정하면 이 프로그램상에서의 기술은 필요하지 않지만, 설정해도 동작하지 않았습니다. 따라서 일부러executable_path
를 지정합니다.
출주 정보를 취하는 클래스 정의
아래에 출주 정보를 스크래핑하는 클래스를 정의합니다. pandas
데이터 프레임에 넣습니다.
from tqdm import tqdm_notebook as tqdm
import pandas as pd
import time
class ShutubaTable:
def __init__(self):
self.shutuba_table = pd.DataFrame()
def scrape_shutuba_table(self, race_id_list):
options= ChromeOptions()
driver = Chrome(executable_path=r'C:\Users\lllni\Documents\Python\20200528_keiba\chromedriver_win32\chromedriver.exe',options=options)
for race_id in tqdm(race_id_list):
url = 'https://race.netkeiba.com/race/shutuba.html?race_id=' + race_id
driver.get(url)
elements = sample_driver.find_elements_by_class_name('HorseList')
for element in elements:
tds = element.find_elements_by_tag_name('td')
row = []
for td in tds:
row.append(td.text)
if td.get_attribute('class') in ['HorseInfo', 'Jockey']:
href = td.find_element_by_tag_name('a').get_attribute('href')
row.append(re.findall(r'\d+', href)[0])
self.shutuba_table = self.shutuba_table.append(pd.Series(row, name=race_id))
time.sleep(1)
driver.close()
포인트로서,
1) 'HorseList` 클래스에 원하는 데이터가 들어 있기 때문에 다음과 같이 꺼낸다.
elements = sample_driver.find_elements_by_class_name('HorseList')
2) td
태그마다 말명, 확률 등 각각의 정보를 꺼낸다.
for element in elements:
tds = element.find_elements_by_tag_name('td')
row = []
for td in tds:
row.append(td.text)
self.shutuba_table = self.shutuba_table.append(pd.Series(row, name=race_id))
이 td
태그를 각각 나열하여 javascript
에 설명된 정보도 검색할 수 있습니다. 또한 element
는 말별입니다. 즉, 말이 바뀔 때마다 row
는 비워져 td
태그의 정보가 또 처음부터 넣을 수 있는 것입니다.
인스턴스화 및 로드
st = ShutubaTable1()
sample_driver = Chrome(executable_path=r'C:\Users\lllni\Documents\Python\20200528_keiba\chromedriver_win32\chromedriver.exe',options=options)
sample_driver.get(url
st.scrape_shutuba_table(['202005030211'])#予想したいrace_idを入れる
st.shutuba_table
레이스 id는 netkeiba.com
이면 출주표의 URL의 말미에 수치가 들어가 있으므로, 보고 싶은 레이스 id의 수치만 꺼내 붙여 주세요.
무사히 꺼낼 수 있었습니다.
끝에
스크래핑에 대한 또 하나의 이해가 깊어졌습니다.
Reference
이 문제에 관하여(경마 예상 모델을 만드는 데 selenium을 사용한 스크래핑을 배웠다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Fumio-eisan/items/64eff837deb43c81e603
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from selenium.webdriver import Chrome, ChromeOptions
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options= ChromeOptions()
driver = Chrome(executable_path=r'(chromedriver.exe)のパスを指定下さい',options=options)
driver.get(url)
from tqdm import tqdm_notebook as tqdm
import pandas as pd
import time
class ShutubaTable:
def __init__(self):
self.shutuba_table = pd.DataFrame()
def scrape_shutuba_table(self, race_id_list):
options= ChromeOptions()
driver = Chrome(executable_path=r'C:\Users\lllni\Documents\Python\20200528_keiba\chromedriver_win32\chromedriver.exe',options=options)
for race_id in tqdm(race_id_list):
url = 'https://race.netkeiba.com/race/shutuba.html?race_id=' + race_id
driver.get(url)
elements = sample_driver.find_elements_by_class_name('HorseList')
for element in elements:
tds = element.find_elements_by_tag_name('td')
row = []
for td in tds:
row.append(td.text)
if td.get_attribute('class') in ['HorseInfo', 'Jockey']:
href = td.find_element_by_tag_name('a').get_attribute('href')
row.append(re.findall(r'\d+', href)[0])
self.shutuba_table = self.shutuba_table.append(pd.Series(row, name=race_id))
time.sleep(1)
driver.close()
elements = sample_driver.find_elements_by_class_name('HorseList')
for element in elements:
tds = element.find_elements_by_tag_name('td')
row = []
for td in tds:
row.append(td.text)
self.shutuba_table = self.shutuba_table.append(pd.Series(row, name=race_id))
st = ShutubaTable1()
sample_driver = Chrome(executable_path=r'C:\Users\lllni\Documents\Python\20200528_keiba\chromedriver_win32\chromedriver.exe',options=options)
sample_driver.get(url
st.scrape_shutuba_table(['202005030211'])#予想したいrace_idを入れる
st.shutuba_table
스크래핑에 대한 또 하나의 이해가 깊어졌습니다.
Reference
이 문제에 관하여(경마 예상 모델을 만드는 데 selenium을 사용한 스크래핑을 배웠다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Fumio-eisan/items/64eff837deb43c81e603텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)