2017-01-17 3 views
1

테니스 경기 결과를 this webpage에서 긁어 내려고했습니다. 특히 두 선수의 이름, 날짜/시간 및 경기 결과를 얻으려고합니다. 나는 두 가지 문제가 오전 :Python을 사용하여 웹에서 데이터 스크래핑 xhr feed

  1. 웹 페이지는 기본적으로 모든 일치를 표시하지 않습니다 -이 단지 클릭하여 공개 될 수 있습니다 페이지 하단의 '더 일치를 보여줍니다. "

  2. 아름다운 수프에 html을로드 할 때 데이터가 나타나지 않습니다. 그것은 일종의 쿼리 ('http://d.flashscore.com/x/feed/f_')에 의해로드되는 것 같아요,하지만 이걸 직접 실행하는 방법을 모르겠습니다.

내 코드 예제

은 다음과 같습니다 :

url="http://www.scoreboard.com/au/tennis/wta-singles/australian-open-2016/results/" 

from urllib.request import Request, urlopen 
req = Request(url, headers={"X-Fsign": "SW9D1eZo"}) 
s = urlopen(req,timeout=50).read() 
s=urlopen(req, timeout=50).read() 
soup=BeautifulSoup(s, "lxml") 

match_times=soup.find_all("td", class_="cell_ad time") 
players=soup.find_all("span", class_="padl" 
results=soup.find_all("td", class_"cell_sa score bold" 
#these all return empty element sets 

어떻게 모든 결과를 볼 수있는 페이지를로드 할 수 있습니까? 그리고 어떻게 위에서 설명한 데이터를 우아하게 추출 할 수 있습니까?

편집 :

def open_url(url): 
    try: 
     from urllib.request import Request, urlopen 
     req = Request(url) 
     s = urlopen(req,timeout=20).read() 
     driver.get(url) 
     try: 
      driver.find_element_by_xpath("""//*[@id="tournament-page-results-more"]/tbody/tr/td/a""").click() 
      time.sleep(5) 
     except: 
      print("No more results to show...") 
     body=driver.find_element_by_id("fs-results") 
     return BeautifulSoup(body.get_attribute("innerHTML"), "lxml") 
    except: 
     print("Webpage doesn't exist") 

이 내가 모든 결과를 공개 할 수 있습니다 의미 : 제안은 셀레늄을 사용하면, 내가 셀레늄/크롬을 사용하여 페이지를로드 한 후 BS4에 HTML을 전송하는 기능을 구축 버튼을 클릭하면 표시됩니다.

matches=[] 
soup=open_url(url) 
rrows=soup.find_all("tr") 
for rrow in rrows: 
    if rrow.attrs['class']!=['event_round']: 
     matches.append(rrow) 

단지 원래 볼 수 있었다 결과를 얻을 : 내가 결과를 포함하는 모든 행을 잡아하려고 따라서 불행히도 코드가 제대로 페이지가로드되기 전에 계속 실행됩니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

이 페이지 JavaScript를 사용하여 데이터를 가져 오려면 urllib을 사용하면 데이터없이 HTML 코드 만 가져옵니다.

JS 페이지를 긁어 내기 위해 셀렌을 사용하십시오.

+0

사례를 제공 할 수있는 기회 - 셀레늄에 익숙하지 않은 경우 – user3725021

+0

@ user3725021 http://selenium-python.readthedocs.io/ –

+1

셀렌을 사용하도록 코드를 수정했습니다 (위 참조). 그래도 문제는 계속 발생합니다. 코드가 계속되기 전에 페이지가 로딩되지 않습니다 ... – user3725021