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

如何用索引像访问列表/JSON一样遍历BeautifulSoup嵌套HTML标签?

实现类似列表索引的方式访问BeautifulSoup嵌套标签

首先你提供的HTML代码存在闭合标签的语法错误(比如</div class = "las">这种写法不对,正确的闭合标签应该是</div>),不过BeautifulSoup解析时会自动修复这类问题,不用太担心。

要实现像code[0][0][1][1]这样的索引访问,核心是过滤掉BeautifulSoup节点中多余的空白文本节点,并将有效子节点转为可索引的列表结构,具体可以这么做:

方法一:手动转换为列表访问

先导入必要模块,解析HTML:

from bs4 import BeautifulSoup, NavigableString

# 假设你的HTML代码存在code变量中
soup = BeautifulSoup(code, 'html.parser')

写一个辅助函数,用来获取节点的有效子元素(过滤掉空白的文本节点):

def get_valid_children(node):
    # 只保留非文本节点,或者是不为空白的文本节点
    return [child for child in node.children 
            if not isinstance(child, NavigableString) or child.strip()]

接下来就可以通过链式索引访问目标节点:

# 第一层:soup的有效子节点是第一个div.las
root_div = get_valid_children(soup)[0]
# 第二层:div.las的有效子节点是div.asas
inner_div = get_valid_children(root_div)[0]
# 第三层:div.asas的有效子节点是table
table = get_valid_children(inner_div)[0]
# 第四层:table的有效子节点是第二个tr(索引1,第一个是表头tr)
target_tr = get_valid_children(table)[1]
# 第五层:tr的有效子节点是第二个td(索引1)
td_smith = get_valid_children(target_tr)[1]

print(td_smith)  # 输出 <td>Smith</td>

方法二:封装类实现直接索引访问

如果觉得手动调用函数麻烦,可以封装一个简单的类,让它支持[]索引:

class IndexableSoup:
    def __init__(self, node):
        self.node = node
        # 初始化时自动获取有效子节点
        self._children = get_valid_children(node)
    
    def __getitem__(self, index):
        # 索引时返回新的IndexableSoup实例
        child_node = self._children[index]
        return IndexableSoup(child_node)
    
    # 可选:获取标签文本
    def text(self):
        return self.node.get_text(strip=True)
    
    # 可选:获取原始标签对象
    def tag(self):
        return self.node

使用方式就非常接近你想要的列表索引了:

soup_index = IndexableSoup(soup)
# 对应你想要的索引逻辑,实际结构需要多一层table的索引
target_td = soup_index[0][0][0][1][1].tag()
print(target_td)  # 输出 <td>Smith</td>
print(target_td.text())  # 输出 Smith

注意点

  • 索引的层级要对应HTML的嵌套结构:你示例中的code[0][0][1][1]少了一层(table是div.asas的子节点,需要多一层索引),实际对应正确结构是[0][0][0][1][1]。
  • 过滤空白节点的原因:HTML中的换行、缩进都会被BeautifulSoup解析为NavigableString类型的节点,这些节点会干扰索引顺序,必须过滤才能保证索引准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:35:40