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

Python BeautifulSoup如何爬取多层div嵌套下tspan的特定值

基于BeautifulSoup提取SVG内tspan数值的实现方案

问题描述

使用Python BeautifulSoup库开展网页爬取工作,已完成账号登录、基础页面爬取逻辑开发,当前遇到提取障碍:需要从多层div嵌套的SVG结构底部的tspan标签中提取指定值。
现有初始代码仅实现了class为tablebox的div、id为exoTooltip的元素、class为exoTooltip undefined的g标签查找,无法定位到目标tspan节点,初始代码如下:

soup = bs(s.get(URL).text, 'html.parser')
divTag = soup.find_all("div", {"class": "tablebox"})
results = soup.find(id="exoTooltip")
elements = results.find_all("g", class_="exoTooltip undefined")

现有代码缺陷

  • 冗余查找外层tablebox div,id为exoTooltip的元素是全局唯一的,不需要依赖外层div定位
  • 查找路径终止于g标签层,没有继续向下穿透SVG嵌套结构定位tspan节点
  • 硬编码匹配g标签的class为exoTooltip undefined,动态页面的class顺序、临时class容易发生变化,会导致匹配失效
  • 逐层硬编码标签路径的写法容错性差,任意一层嵌套变动就会导致匹配失败

修正后代码

直接以唯一id的exoTooltip容器为起点,全局查找内部所有tspan节点,无需手动逐层写嵌套匹配逻辑:

from bs4 import BeautifulSoup

# 复用你已经完成登录的会话对象s即可
soup = BeautifulSoup(s.get(URL).text, 'html.parser')

# 定位唯一的tooltip容器
tooltip_wrap = soup.find(id="exoTooltip")
if tooltip_wrap:
    # 直接查找容器下所有tspan标签,自动穿透div、svg、g等多层嵌套
    all_tspans = tooltip_wrap.find_all("tspan")
    # 遍历提取tspan内的文本值
    for item in all_tspans:
        val = item.get_text(strip=True)
        # 按需过滤你需要的目标值即可
        print(val)
else:
    # 排查点:如果找不到容器,先确认请求返回的源码是否完整
    # 若源码中无对应节点,说明内容是前端JS动态渲染的,需要先用selenium/playwright等工具拿到渲染完成的页面源码再解析
    print("未找到目标容器,请检查页面源码加载情况")

注意事项

不要硬编码多层标签的查找路径,只要定位到最外层稳定的唯一标识节点,直接向下查找目标标签即可,适配性更强。如果遇到动态渲染的SVG内容,不要直接用requests请求的源码解析,必须等页面JS执行完成后再获取源码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:36:37