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

如何用requests-html 0.9.0区分HTML标签内文本与标签尾部文本?

如何用requests-html 0.9.0区分标签内部文本和标签尾部文本?

我尝试用requests-html 0.9.0解析这段HTML:

from requests_html import HTML
html = HTML(html='<span><span class="data">important data</span> and some rubbish</span>')
data = html.find('.data', first=True)
print(data.html) # <span class="data">important data</span> and some rubbish
print(data.text) # important data and some rubbish

现在需要区分.data标签内部包裹的文本,以及这个标签之后的尾部文本(也就是标签闭合后跟着的内容)。

嘿,这个问题其实可以借助requests-html底层依赖的pyquery DOM操作能力轻松解决,我给你两种实用的方法:

方法1:通过父元素内容拆分文本

我们可以先拿到目标元素的父节点内容,再把目标元素和后面的文本节点分开处理:

from requests_html import HTML

html = HTML(html='<span><span class="data">important data</span> and some rubbish</span>')
data_elem = html.find('.data', first=True)

# 提取标签内部的文本,直接用text属性即可
inner_text = data_elem.text.strip()
print(f"标签内部文本: {inner_text}")  # 输出: important data

# 获取父元素的所有子节点(包含元素节点和文本节点)
parent_contents = data_elem.parent.contents()
# 找到目标元素在父节点内容里的位置
elem_pos = parent_contents.index(data_elem)
# 把元素后面的所有文本节点拼接起来,就是我们要的尾部文本
trailing_text = ''.join([node.strip() for node in parent_contents[elem_pos+1:] if isinstance(node, str)]).strip()
print(f"标签尾部文本: {trailing_text}")  # 输出: and some rubbish

方法2:直接获取后续兄弟文本节点

pyquery提供了next_siblings()方法,可以直接拿到当前元素之后的所有兄弟节点,我们只需要筛选出文本节点就行:

from requests_html import HTML

html = HTML(html='<span><span class="data">important data</span> and some rubbish</span>')
data_elem = html.find('.data', first=True)

inner_text = data_elem.text.strip()
# 提取所有后续的兄弟文本节点并拼接
trailing_text = ''.join([sibling.strip() for sibling in data_elem.next_siblings if isinstance(sibling, str)]).strip()

print(f"标签内部文本: {inner_text}")
print(f"标签尾部文本: {trailing_text}")

这两种方法都能精准区分开标签内部的文本和标签之后的尾部内容,核心就是利用DOM节点的结构来拆分内容,而不是直接用text属性把所有文本混在一起~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:27:34