如何从标签中获取文本,但忽略其他子标签

Posted

技术标签:

【中文标题】如何从标签中获取文本,但忽略其他子标签【英文标题】:how to get text from within a tag, but ignore other child tags 【发布时间】:2015-01-27 12:30:10 【问题描述】:

我正在做美味的汤。 我有一个 html 字符串:

<div><b>ignore this</b>get this</div>

如何检索“get this”,而忽略“ignore this

谢谢

【问题讨论】:

【参考方案1】:

您可以获得div 文本,而不是递归检索子文本:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<div><b>ignore this</b>get this</div>')
>>> soup.div.find(text=True, recursive=False)
u'get this'

这与文本相对于子项的位置无关:

>>> soup = BeautifulSoup('<div>get this<b>ignore this</b></div>')
>>> soup.div.find(text=True, recursive=False)
u'get this'

【讨论】:

请问第一个和第二个代码sn-ps有什么区别?在我看来,它们是相同的两行(第二个代码 sn-p 中有一个小错字)。 @AustinA 不同之处在于 html。这是为了展示recursive=False 如何为您提供div 的文本,而忽略子元素,无论它们的位置如何。 (谢谢,我在第二个 sn-p 中将 s 修正为 soup 错字:)) 是的,我现在明白了。由于某种原因,我以前看不到。不过,我确实有一个问题。假设有多个 div 标签,我想从中获取文本。 &lt;div class="main"&gt;&lt;div class="sub"&gt;Text1.&lt;span&gt;I don't want this text.&lt;/span&gt;&lt;/div&gt;&lt;div class="sub"&gt;Text2.&lt;span&gt;I don't want this text either.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;。我一直在尝试做的是使用soup.findAll('div','sub', recursive=False),但这给了我一个空列表,而soup.findAll('div','sub')给了我Text1. I don't want this text. Text2. I don't want this text either.我在这里做错了什么? find_all 返回匹配列表。您需要将我的解决方案应用于每个匹配的 div。像这样的东西:' '.join(div.find(text=True, recursive=False) for div in soup.findAll('div', 'sub'))。如果需要,然后将所有文本连接到一个字符串中。 @Austin。如果他帮助了你,你能给他点赞吗?这是一个很好的答案。谢谢:)

以上是关于如何从标签中获取文本,但忽略其他子标签的主要内容,如果未能解决你的问题,请参考以下文章

按下标签栏项目时如何显示警报视图以及在其他目标中使用时如何忽略它?

如何从 QTabWIdget C++ 读取 textedit 对象的文本?

单击 UIView 时从 UIView 内部的标签获取文本

在Java中解析XML并忽略标签[重复]

文本框和标签数组如何在 C# 中的提交方法中获取值

如何使用 BeautifulSoup 从父子标签中获取文本以放入 DOCX 表中