나는 www.whoscored.com에서 통계를 긁어 내고 판다 데이터 프레임을 작성하는 프로그램을 작성하려고 시도해 왔습니다.url이 변경되지 않을 때 Selenium을 사용하여 여러 페이지에 걸쳐 표를 긁음
나는 crookedleaf의 도움으로 코드를 업데이트하고이 작업 코드 :
import time
import pandas as pd
from pandas.io.html import read_html
from pandas import DataFrame
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://www.whoscored.com/Regions/252/Tournaments/2/Seasons/6335/Stages/13796/PlayerStatistics/England-Premier-League-2016-2017')
summary_stats = DataFrame()
while True:
while driver.find_element_by_xpath('//*[@id="statistics-table-summary"]').get_attribute('class') == 'is-updating': # driver.find_element_by_xpath('//*[@id="statistics-table-summary-loading"]').get_attribute('style') == 'display; block;' or
time.sleep(1)
table = driver.find_element_by_xpath('//*[@id="statistics-table-summary"]')
table_html = table.get_attribute('innerHTML')
page_number = driver.find_element_by_xpath('//*[@id="currentPage"]').get_attribute('value')
print('Page ' + page_number)
df1 = read_html(table_html)[0]
summary_stats = pd.concat([summary_stats, df1])
next_link = driver.find_element_by_xpath('//*[@id="next"]')
if 'disabled' in next_link.get_attribute('class'):
break
next_link.click()
print(summary_stats)
driver.close()
가 지금은 다른 탭에서 통계를 수집하기 위해 노력하고 있습니다. 나는 정말 가깝지만 코드가 빠져 나가야 할 때 루프를 종료하지 않습니다. 여기에 아래의 코드입니다 :
defensive_button = driver.find_element_by_xpath('//*[@id="stage-top-player-stats-options"]/li[2]/a')
defensive_button.click()
defensive_stats = DataFrame()
while True:
while driver.find_element_by_xpath('//*[@id="statistics-table-defensive"]').get_attribute('class') == 'is-updating': # driver.find_element_by_xpath('//*[@id="statistics-table-summary-loading"]').get_attribute('style') == 'display; block;' or
time.sleep(1)
table = driver.find_element_by_xpath('//*[@id="statistics-table-defensive"]')
table_html = table.get_attribute('innerHTML')
page_number = driver.find_element_by_xpath('//*[@id="statistics-paging-defensive"]/div/input[1]').get_attribute('value')
print('Page ' + page_number)
df2 = read_html(table_html)[0]
defensive_stats = pd.concat([defensive_stats, df2])
next_link = driver.find_element_by_xpath('//*[@id="statistics-paging-defensive"]/div/dl[2]/dd[3]')
if 'disabled' in next_link.get_attribute('class'):
break
next_link.click()
print(defensive_stats)
이 코드는 모든 페이지를 통해 루프는, 그러나 당신은 당신의 루프 외부에서 테이블의 코드를 정의하는 마지막 페이지
코드를 업데이트했지만 여전히 문제가 있습니다. 만약 당신이 다른 모습을 보니 정말 고마워 할 것입니다. – jchadwick92
@ jchadwick92 제 답변에 대한 내 업데이트를 확인하고, 문제가 있다면 알려주세요 – crookedleaf
코드가 훌륭하게 작동했습니다. 정말 고마워요. 나는 이제 방어 구역으로 넘어 갔지만 루프를 빠져 나가는 데 문제가 있습니다. 다시 볼 수 있습니까? – jchadwick92