You need to enable JavaScript to run this app. BeautifulSoup如何提取匹配'Lead'标签后的相邻指定标签内容
优惠活动
大模型
产品
解决方案
定价
更多

BeautifulSoup如何提取匹配'Lead'标签后的相邻指定标签内容

基于BeautifulSoup的指定内容提取实现方案

实现逻辑

每一步严格对应你提出的提取要求,避免定位错位:

  • 遍历页面内所有div标签,筛选出文本修剪后**精确等于"Lead"**的目标标签,不会误匹配包含"Lead"字样但内容不符的节点(比如文本为"Leadership"的标签)
  • 从找到的Lead标签出发,定位紧邻的下一个兄弟节点中,类名为name的div,提取标签内的文本作为姓名
  • 从该name类div出发,定位紧邻的下一个兄弟节点,提取节点内嵌套的value类span文本作为邮箱
  • 最后按照姓名+双空格+邮箱的格式拼接输出

完整可运行代码

代码直接运行即可基于你提供的示例HTML得到预期结果:

from bs4 import BeautifulSoup

# 待解析的示例HTML内容
html_sample = """
<div class="badge memberType Member long notAffiliatedContact">Lead</div>
<div class="name"><a href="/10016/John Doe">John Doe</a></div>
<div class="posted"><span class="label">Email: </span><span class="value break-word">john.doe@johndoe.com</span></div>
"""

soup = BeautifulSoup(html_sample, "html.parser")

# 1. 定位文本精确匹配"Lead"的div标签
lead_target = None
for div in soup.find_all("div"):
    if div.get_text(strip=True) == "Lead":
        lead_target = div
        break

if not lead_target:
    print("未找到内容为Lead的目标标签")
else:
    # 2. 找紧邻的类名为name的下一个兄弟div
    name_node = lead_target.find_next_sibling("div", class_="name")
    if not name_node:
        print("未找到紧邻的name类div标签")
    else:
        user_name = name_node.get_text(strip=True)
        # 3. 定位name节点下紧邻的兄弟节点,提取内嵌的邮箱内容
        email_container = name_node.find_next_sibling("div")
        email_node = email_container.find("span", class_="value")
        user_email = email_node.get_text(strip=True)
        # 按要求格式输出
        print(f"{user_name}  {user_email}")

运行输出

John Doe  john.doe@johndoe.com

容易踩的坑提示

  • 不要直接用string="Lead"做匹配条件:如果目标标签的文本前后存在换行、空格等不可见字符,会导致匹配失效,用get_text(strip=True)做等值判断的兼容性更好
  • 定位紧邻兄弟节点必须使用find_next_sibling(),不要用通用的find_next():后者会沿文档树一直向下遍历直到匹配到符合条件的节点,无法严格满足“紧邻”的定位要求,页面结构稍复杂时很容易找错目标
  • 提取文本时统一加strip=True参数,去掉文本前后的多余空白,避免输出结果夹杂无意义的换行、空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 03:45:05