Python 3 mengekstrak data html dari situs olahraga

Oct 11 2020

Saya telah mencoba mengekstrak data dari situs olahraga dan sejauh ini gagal. Saya Mencoba untuk mengekstrak 35, Tendangan ke Gawang dan 23 tetapi gagal.

<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)

Ini adalah kode yang telah saya coba gunakan dan ketika saya menjalankannya, saya mendapatkan "Tidak Ada" tercetak pada saya. Bisakah seseorang membantu saya sehingga saya dapat mencetak data.

Halaman penuh ditemukan di sini: https://www.scoreboard.com/uk/match/lvbns58C/#match-statistics;0

Jawaban

AlexandraDudkina Oct 11 2020 at 14:02

Karena situs web dirender oleh javascript, opsi yang memungkinkan akan memuat halaman menggunakan selenium dan kemudian mengurai dengan 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()