2016-04-17 5 views
1
import requests 
from bs4 import BeautifulSoup 

def findPosts(): 
    url = 'http://espn.go.com/nba/scoreboard' 
    headers = {} 
    headers['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.3" 
    soup = BeautifulSoup(requests.get(url, headers = headers).text, "html.parser") 
    team1 = soup.find_all('a',{'name' : "&lpos=nba:scoreboard:team"}) 
    score1 = soup.find_all('td',{'class' : 'total'}) 
    print(team1) 
    print(score1) 

findPosts() 

Я получаю пустой список, но я уверен, что исходный код URL содержит элементы, которые я указал. Есть ли что-нибудь в документации BeautifulSoup, которую я использую?BeautifulSoup Скребок нет вывода

+0

вы получаете пустой список, потому что 'find_all' метод возвращает список из WebElements, найденных в запросе, и, как говорится ниже, этот контент загружается динамически. – n1c9

+0

Но в текущей форме веб-страниц при запуске программы не следует возвращать содержимое, которое отображается в это время/ – OntologicalSin

+0

, если это содержимое не загружается через javascript. Если это так, как говорится в ответе, то что-то вроде 'selenium' может быть тем, что вам нужно использовать вместо bs4. – n1c9

ответ

3

Данные на этой странице динамически создаются с помощью Javascript. Если вы щелкните правой кнопкой мыши в своем браузере -> просмотрите источник и найдите якоря с указанным вами именем, вы ничего не найдете. Из того, что я могу сказать, все данные JSON для создаваемой страницы уже находятся на странице, поэтому вам не нужно делать какие-либо дополнительные запросы для получения требуемых данных.

Чтобы найти данные JSON на странице, я искал одно из имен команд (Mavericks) и увидел массивный объект Javascript, содержащий данные, которые вы хотите очистить.

+0

Я просто пытаюсь отменить имена команд и текущие оценки. – OntologicalSin

1

Вы можете извлечь с помощью регулярных выражений JSON и получить доступ к данным с использованием Dict обозначения:

from bs4 import BeautifulSoup 
import requests 
import re 
import json 

url='http://espn.go.com/nba/scoreboard' 
headers = {} 
headers['User-Agent'] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.3" 
soup = BeautifulSoup(requests.get(url, headers = headers).text, "html.parser") 

script = soup.find_all('script')[7].get_text() 
map_search = re.search('^.*?= (\{.*);window.*', script) 
mapData = map_search.group(1) 
mapDataObj = json.loads(mapData) 
scores = mapDataObj['events'][0]['competitions'][0]['competitors'][1]['linescores'] 
name = mapDataObj['events'][0]['competitions'][0]['competitors'][1]['team']['shortDisplayName'] 
total_score = mapDataObj['events'][0]['competitions'][0]['competitors'][1]['score'] 

print 'Team: %s' % name 
for score in scores: 
    print('Score: %s' % score['value']) 
print('Total score: %s' % total_score) 

Выход:

Team: Pacers 
Score: 19 
Score: 24 
Score: 27 
Score: 30 
Total score: 100 
Смежные вопросы