You need to enable JavaScript to run this app. 如何使用bs4直接搜索嵌套在其他div下的目标属性,无需逐层遍历DOM树
优惠活动
大模型
产品
解决方案
定价
更多

如何使用bs4直接搜索嵌套在其他div下的目标属性,无需逐层遍历DOM树

问题解答

BeautifulSoup的查找方法默认开启全局递归搜索,不需要手动逐层遍历DOM树,你可以直接从soup顶层定位目标比分元素。

实现逻辑

  • 首先通过浏览器开发者工具确认比分元素的特征,比如UEFA官网的比分多为带js-score类的span标签,或是class值包含score关键字的容器元素
  • 直接调用soup的查找方法,指定对应特征即可一次性拿到所有匹配的比分元素,不需要先定位上层的matches_list节点
  • 额外注意:该网站部分比分数据是前端JS动态加载的,requests直接请求拿到的静态HTML可能不包含实时数据,遇到该情况可以抓后台数据接口,或用Selenium等动态渲染工具抓取

参考代码

from datetime import date
import requests
from bs4 import BeautifulSoup

today = date.today()
d = today.strftime("%Y-%m-%d")

page = requests.get("https://www.uefa.com/livescores/?date=" + d) 
soup = BeautifulSoup(page.content, "html.parser")

# 直接全局搜索所有比分元素
scores = soup.find_all("span", class_="js-score")
# 类名不固定的情况下也可以用模糊匹配,比如匹配所有class包含score的元素
# scores = soup.find_all(lambda tag: tag.get("class") and any("score" in c for c in tag.get("class")))

for score in scores:
    print(score.text.strip())

原理说明

find_all()方法的recursive参数默认值为True,调用时会自动遍历当前节点下的所有子孙节点,所以直接从soup根节点调用该方法就是对整个DOM树做全局搜索,完全不需要手动逐层向下查找。只要目标元素的特征足够明确,就能直接定位到。

内容的提问来源于stack exchange,提问作者David Nicoara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 11:15:05