当前位置: 首页 > 面试题库 >

Python元素树-从元素中提取文本,剥离标签

尉迟明辉
2023-03-14
问题内容

使用Python中的ElementTree,如何从节点中提取所有文本,剥离该元素中的所有标签并仅保留文本?

例如,说我有以下内容:

<tag>
  Some <a>example</a> text
</tag>

我想回来Some example text。我该怎么做呢?到目前为止,我所采用的方法产生了相当灾难性的结果。


问题答案:

如果您在Python 3.2+下运行,则可以使用itertext

itertext 创建一个文本迭代器,该迭代器按文档顺序循环遍历此元素和所有子元素,并返回所有内部文本:

import xml.etree.ElementTree as ET
xml = '<tag>Some <a>example</a> text</tag>'
tree = ET.fromstring(xml)
print(''.join(tree.itertext()))

# -> 'Some example text'

如果您在较低版本的Python中运行,则可以通过将其附加到类上来重用的实现itertext()Element,然后可以像上面一样完全调用它:

# original implementation of .itertext() for Python 2.7
def itertext(self):
    tag = self.tag
    if not isinstance(tag, basestring) and tag is not None:
        return
    if self.text:
        yield self.text
    for e in self:
        for s in e.itertext():
            yield s
        if e.tail:
            yield e.tail

# if necessary, monkey-patch the Element class
if 'itertext' not in ET.Element.__dict__:
    ET.Element.itertext = itertext

xml = '<tag>Some <a>example</a> text</tag>'
tree = ET.fromstring(xml)
print(''.join(tree.itertext()))

# -> 'Some example text'


 类似资料:
  • 问题内容: 我只想从汤中最上面的元素中提取文本;但是汤.text也会给出所有子元素的文本: 我有 输出为。我只想“是”。 实现此目标的最佳方法是什么? 编辑 :我也想在解析’ ‘时输出。 问题答案: 那又如何呢? 编辑: 我想我已经了解了你现在想要的。尝试这个:

  • 如何获取属性中具有特定文本的跨度?我正在尝试提取文本“星星”后面的数字。那么我怎么能选择一个包含文本“rating_sprite星”的 span 标签,并且我希望从属性中提取值“star5”,以便我可以从文本中获取 5。 目前我没有收到任何元素! HTML代码段如下所示

  • 比起Ruby、Capybara和SitePrism,我更熟悉Java和Selenium,所以如果这个问题太多,我深表歉意。 Selenium有一个非常有用的类来管理Select标签,Selenium::WebDriver::Support::Select,它可以通过传递代表select的Selenium Element(Selenium::WebDriver::Element)来创建。我想得到一个

  • 我正在尝试使用以下结构单击element: 但是,这将抛出。 我当前正在使用:刮取(父)元素列表。这标识了正确的元素列表(按预期工作)。有了列表后,我应用以下函数: 使用: 而且 但是,这将触发。 我对此进行了几个小时的研究,基于几个帖子,我添加了“。”在两个斜杠之前,这表示相对于父级(而不是相对于整个DOM)。 如果我移除这个点,我总是得到页面上的第一个元素--而不是列表中每个父元素的子元素。

  • 我想从Chrome的模态中得到一条短信。使用控制台,我可以获得如下内部文本: 现在,在我的测试中,我可以使用 我甚至可以点击那个网址 例如,我不能将内部文本放入变量。我试着使用这篇文章中的ClientFunction 并尝试使用本文建议的普通选择器 如何从元素中提取文本?我知道在这种情况下是有限的,对吗?

  • 我正在浏览一个包含几个元素的网页,我想在不包含其子元素的情况下获取其中的文本。 页面结构如下: 当我使用时,得到的结果是: 我正在使用BeautifulSoup4和Python3