You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Beautiful Soup选择检查到的CSS类返回空值求助

爬取Livescore网站时CSS类.Dk返回空结果的解决办法

核心原因

  • 动态内容未渲染:浏览器检查看到的.Dk元素是JavaScript动态生成的,requests.get()只能获取页面初始HTML,无法加载JS渲染后的内容。
  • 类名动态生成:Livescore的部分类名是随机生成的(比如.Dk可能每次请求都会变化),固定用这个类名自然匹配不到元素。

解决方法

1. 使用支持JS渲染的工具(如Selenium)

通过浏览器驱动加载页面,等待JS渲染完成后再提取内容:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup
import time

# 替换为你的ChromeDriver路径
service = Service('chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get("https://www.livescore.com/en/football/2022-12-06/")
time.sleep(3)  # 等待页面完全加载

soup = BeautifulSoup(driver.page_source, 'lxml')
results = soup.select('.Dk')
print(results)

driver.quit()

2. 改用稳定的选择器

放弃动态类名,基于元素的固定属性或结构选择:

  • 比如找元素的data-*属性(如data-testid),或者父元素的固定类名:
import requests
import bs4

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

response = requests.get("https://www.livescore.com/en/football/2022-12-06/", headers=headers)
soup = bs4.BeautifulSoup(response.text, 'lxml')

# 示例:通过包含固定关键词的类名选择
matches = soup.select('div[class*="MatchCard"]')
# 或者通过data属性选择
matches = soup.select('[data-testid="match-card"]')

print(matches)

3. 模拟浏览器请求头

部分网站会识别非浏览器请求,添加User-Agent等请求头可以避免被拦截:

import requests
import bs4

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.9'
}

response = requests.get("https://www.livescore.com/en/football/2022-12-06/", headers=headers)
soup = bs4.BeautifulSoup(response.text, 'lxml')
# 执行后续选择操作

内容的提问来源于stack exchange,提问作者Kolawole Otitolaiye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:20:29