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

Python爬取HTML时如何仅提取span直属文本排除嵌套span内容

外层span直属文本提取方法

场景说明

待解析HTML结构如下:

<span class="ms-2 d-flex">
     <span class="d-none d-xl-block me-1"> mobile </span>   
     ItsMobileNumber
</span>

结构中外层span嵌套了一个子span,子span文本为mobile,需要提取的目标内容是外层span的直属文本ItsMobileNumber。
使用title.find("span").get_text()提取时,方法会递归获取所有层级的文本内容,返回结果同时包含mobile和目标文本,不符合提取要求。

具体实现

  • 通用稳定方案:筛选直接文本节点
    标签的contents属性会返回所有直属子节点,包含嵌套标签、文本节点、空白换行三类内容。导入BeautifulSoup的NavigableString类型判断节点属性,过滤掉标签节点和空白内容,就能拿到纯直属文本,该方法适配多段直属文本的场景,不受结构小幅变动影响:
    from bs4 import NavigableString
    
    outer_span = title.find("span", class_="ms-2 d-flex")
    target_text = ""
    for child in outer_span.contents:
        if isinstance(child, NavigableString):
            stripped = child.strip()
            if stripped:
                target_text = stripped
    print(target_text) # 输出 ItsMobileNumber
    
  • 简单直接方案:移除子标签后提取
    先定位外层span,把其下所有直属嵌套标签全部移除,再调用get_text()即可拿到剩余的直属文本:
    outer_span = title.find("span", class_="ms-2 d-flex")
    # recursive=False 只找直属子标签,避免误删深层内容
    for inner_tag in outer_span.find_all(recursive=False):
        inner_tag.extract()
    target_text = outer_span.get_text().strip()
    print(target_text) # 输出 ItsMobileNumber
    
  • 固定结构适配方案:取相邻兄弟节点
    如果页面结构完全固定,目标文本刚好在内层span的紧邻后方,可以直接通过next_sibling属性取值,代码最简洁:
    inner_span = title.find("span", class_="d-none d-xl-block me-1")
    target_text = inner_span.next_sibling.strip()
    print(target_text) # 输出 ItsMobileNumber
    

注意:如果页面存在动态调整结构的可能,不建议使用第三种方案,优先选择前两种通用写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:18:23