Python 3 trích xuất dữ liệu html từ trang web thể thao
Oct 11 2020
Tôi đã cố gắng trích xuất dữ liệu từ một trang web thể thao và cho đến nay vẫn thất bại. Tôi đang cố gắng thực hiện 35 cú sút, ghi bàn và 23 nhưng đều thất bại.
<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)
Đây là mã tôi đã cố gắng sử dụng và khi tôi chạy nó, tôi nhận được thông báo "Không có". Ai đó có thể giúp tôi để tôi có thể in ra dữ liệu.
Toàn bộ trang được tìm thấy ở đây: https://www.scoreboard.com/uk/match/lvbns58C/#match-statistics;0
Trả lời
AlexandraDudkina Oct 11 2020 at 14:02
Vì trang web được hiển thị bằng javascript, tùy chọn khả thi sẽ tải trang bằng cách sử dụng selen và sau đó phân tích cú pháp với 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()