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

如何用Python Selenium提取含<br>元素的独立文本内容?

解决被<br>分隔的文本提取问题

嘿,我太懂你这种抓数据碰到的糟心情况了——好不容易用XPath定位到了目标元素,结果返回的文本全被<br>拆成一团,没法单独拿出每个联系字段对吧?别慌,我给你几个实用的解决办法,结合常见的HTML结构场景来给你演示:

方法1:直接提取独立的文本节点

大多数情况下,被<br>分隔的内容其实都是父元素下的独立text()节点,你可以直接定位这些节点,而不是取父元素的整体文本。

举个常见的联系信息HTML结构:

<div class="contact-details">
  公司名称: 某某科技<br>
  联系人: 李经理<br>
  联系电话: 010-XXXXXXX<br>
  邮箱: contact@example.com
</div>

对应的XPath可以这么写:
//div[@class='contact-details']/text()

这个XPath会返回一个文本节点列表,每个元素就是<br>分隔开的内容。接下来你只需要过滤掉空的、带多余空格的项就行。比如用Python的lxml库实现:

from lxml import etree

# 示例HTML
html = """
<div class="contact-details">
  公司名称: 某某科技<br>
  联系人: 李经理<br>
  联系电话: 010-XXXXXXX<br>
  邮箱: contact@example.com
</div>
"""

tree = etree.HTML(html)
# 获取所有文本节点
raw_texts = tree.xpath("//div[@class='contact-details']/text()")
# 清理空白并过滤空内容
cleaned_items = [text.strip() for text in raw_texts if text.strip()]

print(cleaned_items)
# 输出: ['公司名称: 某某科技', '联系人: 李经理', '联系电话: 010-XXXXXXX', '邮箱: contact@example.com']

方法2:提取整体文本后拆分

如果你的XPath工具不支持直接获取多个文本节点(或者你更习惯处理字符串),可以先提取父元素的完整文本,再按换行(因为<br>在渲染时会被解析为换行)拆分,最后清理内容。

还是用上面的HTML示例,代码如下:

full_text = tree.xpath("string(//div[@class='contact-details'])").strip()
# 按换行拆分
split_items = [line.strip() for line in full_text.split('\n') if line.strip()]
print(split_items)
# 输出和方法1一致

方法3:用XPath 2.0的tokenize()函数(进阶)

如果你使用的是支持XPath 2.0的工具(比如Saxon、或者配置了相关扩展的lxml),可以直接用tokenize()函数按<br>拆分文本:

tokenize(normalize-space(//div[@class='contact-details']), '\s*<br\s*/?>\s*')

这个表达式会自动处理<br>或<br/>的情况,同时去掉前后的多余空格,直接返回拆分后的干净文本列表。

小提醒

  • 如果你的HTML里<br>标签有额外属性(比如<br class="line-break">),方法1依然有效,因为我们只关注父元素下的文本节点,不管<br>的具体属性。
  • 处理时记得用strip()清理每个文本项的前后空格,避免拿到空字符串或者带大量缩进的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:12:01