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

如何使用BeautifulSoup按类名查找标签的指定父元素

问题原因

返回None的核心原因有两点:

  • 第二种写法的参数名错误:BeautifulSoup中指定class的关键字参数为class_(下划线位于class关键字后方),你写的_class是无效参数,不会被识别为class筛选条件。
  • 第一种字典传参的写法逻辑本身正确,返回None通常是因为定位到的char_title节点不符合预期:如果目标文本前后存在换行、缩进空格、零宽字符等不可见内容,精确字符串匹配可能命中DOM树其他位置的同文本节点,该节点不存在class为TableContainer的父级div,自然返回None。
正确实现代码

先通过class+文本包含匹配的方式稳妥定位标题节点,再向上查找指定父元素,参考代码如下:

from bs4 import BeautifulSoup

soup = BeautifulSoup(page.content, "html.parser")

# 稳妥定位标题div,避免空白字符导致匹配错位
char_title = soup.find(
    "div",
    class_="Text",
    string=lambda text: text and "Character Information" in text.strip()
)

# 父元素查找二选一即可
# 写法1:通过attrs字典传参筛选
parent = char_title.find_parent("div", attrs={"class": "TableContainer"})
# 写法2:通过class_关键字参数筛选
# parent = char_title.find_parent("div", class_="TableContainer")

# 从父元素下提取目标表格
# 提取外层Table3表格
target_table = parent.find("table", class_="Table3")
# 提取内层宽度100%的目标内容表格
# target_table = parent.find("div", class_="InnerTableContainer").find("table", style="width: 100%")
排查技巧

如果代码运行仍返回None,可以遍历当前节点的所有父节点,打印节点信息校验实际DOM结构是否和预期一致:

# 遍历所有上层父节点,输出div节点的class属性
for parent_node in char_title.parents:
    if parent_node.name == "div":
        print(parent_node.get("class"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:27:17