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

如何使用Beautiful Soup获取父元素文本并排除子元素内容?

解决方法:提取
  • 元素中排除后的文本
  • 针对你给出的HTML结构和需求,这里提供几种实用的修改方案:

    方法1:移除标签后获取文本

    这种方法先彻底移除

  • 中的子元素,再提取剩余文本,适合结构不固定但需要排除特定标签的场景:

    for item in soup2.findAll('div', {'class':'box-body light-b'}):
        sub_items = item.findAll('li')
        for sub_item in sub_items:
            # 查找并移除<li>中的<b>标签
            b_tag = sub_item.find('b')
            if b_tag:
                b_tag.decompose()
            # 获取处理后的文本,strip()去除首尾多余空格
            print(sub_item.get_text(strip=True))
    

    方法2:直接获取标签的后续文本

    如果HTML结构固定(后直接是目标文本),可以直接取的兄弟节点内容,效率更高:

    for item in soup2.findAll('div', {'class':'box-body light-b'}):
        sub_items = item.findAll('li')
        for sub_item in sub_items:
            b_tag = sub_item.find('b')
            if b_tag:
                # 提取<b>之后的文本并去除空格
                target_text = b_tag.next_sibling.strip()
                print(target_text)
    

    方法3:筛选非标签的文本节点

    如果

  • 内存在多个子元素,这种方法可以精准筛选出所有非的文本内容:

    for item in soup2.findAll('div', {'class':'box-body light-b'}):
        sub_items = item.findAll('li')
        for sub_item in sub_items:
            # 遍历所有子节点,收集非<b>标签的文本
            target_text = ''.join(
                [node.strip() for node in sub_item.contents 
                 if not hasattr(node, 'name') or node.name != 'b']
            ).strip()
            print(target_text)
    

    以上三种方法都能输出你需要的James,可以根据实际HTML结构选择最合适的方案。

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

  • 相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.08.06 13:50:32