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

如何获取BeautifulSoup标签的所有直接子节点?有无更简洁实现方式?

嘿,这个需求其实BeautifulSoup已经给我们准备了超简洁的实现方式,根本不用绕弯子找兄弟节点~

最直接的方案:用find_all的recursive参数

BeautifulSoup的find_all方法有个recursive参数,默认是True(会递归查找所有子节点),把它设为False,就能只获取当前标签的直接子标签,完全符合你的需求:

from bs4 import BeautifulSoup

html = """<div class='body'><span>A</span><span><span>B</span></span><span>C</span></div>"""
soup = BeautifulSoup(html, 'html.parser')

# 先定位到目标div
target_div = soup.find('div', class_='body')
# 非递归获取所有直接子标签
direct_child_tags = target_div.find_all(True, recursive=False)

# 验证结果
for i, tag in enumerate(direct_child_tags, 1):
    print(f"block{i} : {tag}")

运行后会输出你想要的三个块:

block1 : A
block2 : B
block3 : C

另一种简洁写法:遍历children并过滤

如果你喜欢列表推导式,也可以直接遍历目标标签的children属性,过滤掉非标签类型的节点(比如空白字符串节点):

direct_child_tags = [child for child in target_div.children if isinstance(child, Tag)]

这个效果和上面的方法完全一致,而且代码同样清爽。

对比你当前的实现,这两种方式都直接针对目标div的直接子节点操作,逻辑更清晰,也避免了手动处理兄弟节点的繁琐和潜在错误~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:45:29