2016-03-12 1 views
0

Я строю программу BeautifulSoup, и она не находит div. Я подтвердил как с кодом Python (печать), так и с telnet, что загрузка страницы просто не загружает все необходимые мне div.BeautifulSoup и telnet не загружают все div's

Ссылка http://espn.go.com/mens-college-basketball/scoreboard

Я пытаюсь захватить команду и их счет, но <div id="events" class> не загружается содержания. Когда я печатаю то, что получено, я получаю <div id="events"></div> -> он не печатает class

Это использование какого-то JS?

+0

Да, это, вероятно, что содержание внутри DIV создается с помощью Javascript. Чтобы подтвердить, что вы можете использовать вкладку «Сеть» в консоли браузера, чтобы узнать, какие данные загружает сайт после загрузки главной страницы. Затем вы можете ** попробовать ** сделать тот же запрос, что и код Javascript, чтобы получить доступ к данным оценки, но ваш пробег будет отличаться ... –

ответ

0

События динамически загружаются с отдельным запросом API, а затем с помощью JS, выполняемого браузером, создаются события div. Вам нужно что-то сделать для этого запроса и выполнить JavaScript - например, настоящий браузер. Работа примера использования обезглавленного PhantomJS контролируется selenium:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 


driver = webdriver.PhantomJS() 
driver.get("http://espn.go.com/mens-college-basketball/scoreboard/_/date/20160313") 

# waiting for at least a single event to load/appear 
wait = WebDriverWait(driver, 10) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#events article"))) 

for event in driver.find_elements_by_css_selector("#events article"): 
    home, away = event.find_elements_by_css_selector("#teams > tr") 

    home_team_name = home.find_element_by_css_selector("h2 > a[name]").text 
    away_team_name = away.find_element_by_css_selector("h2 > a[name]").text 

    home_score = home.find_element_by_css_selector("td.total").text 
    away_score = away.find_element_by_css_selector("td.total").text 

    print("'{}' against '{}'. Score: {}: {}".format(home_team_name, away_team_name, home_score, away_score)) 

driver.close() 

Печать:

'Purdue' against 'Michigan State'. Score: 62: 66 
'Kentucky' against 'Texas A&M'. Score: 82: 77