Python 3 извлекает html-данные со спортивного сайта

#python #html #web-scraping #beautifulsoup

#python #HTML #очистка веб-страниц #beautifulsoup

Вопрос:

Я пытался извлечь данные со спортивного сайта и до сих пор терпел неудачу. Я пытаюсь извлечь 35, удары по воротам и 23, но безуспешно.

 <div class="statTextGroup">
   <div class="statText statText--homeValue">35</div>
   <div class="statText statText--titleValue">Shots on Goal</div>
   <div class="statText statText--awayValue">23</div></div>  

 from bs4 import BeautifulSoup
import requests

result = requests.get("https://www.scoreboard.com/uk/match/lvbns58C/#match-statistics;0")
src = result.content

soup = BeautifulSoup(src, 'html.parser')

stats = soup.find("div", {"class": "tab-statistics-0-statistic"})
print(stats)
  

Это код, который я пытался использовать, и когда я его запускаю, мне выводится «None». Может ли кто-нибудь помочь мне, чтобы я мог распечатать данные.

Полная страница найдена здесь: https://www.scoreboard.com/uk/match/lvbns58C/#match-statistics ;0

Комментарии:

1. d.scoreboard.com/uk/x/feed/d_st_lvbns58C_en-uk_1 вернет информацию, которую вы ищете.

Ответ №1:

Поскольку веб-сайт отображается с помощью javascript, возможным вариантом будет загрузить страницу с помощью selenium, а затем проанализировать ее с помощью BeautifulSoup:

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

# initialize selenium driver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
wd = webdriver.Chrome('<<PATH_TO_SELENIUMDRIVER>>', options=chrome_options)

# load page via selenium
wd.get("https://www.scoreboard.com/uk/match/lvbns58C/#match-statistics;0")

# wait 30 seconds until element with class mainGrid will be loaded
table = WebDriverWait(wd, 30).until(EC.presence_of_element_located((By.ID, 'statistics-content')))

# parse content of the table
soup = BeautifulSoup(table.get_attribute('innerHTML'), 'html.parser')

print(soup)

# close selenium driver
wd.quit()