使用lxml/ElementTree获取不连续的文本

GJ.*_*GJ. 4 python lxml elementtree html-parsing

假设我有这种HTML,我需要使用lxml/ElementTree选择"text2":

<div>text1<span>childtext1</span>text2<span>childtext2</span>text3</div>
Run Code Online (Sandbox Code Playgroud)

如果我已经将div元素作为mydiv,那么mydiv.text只返回"text1".

使用itertext()似乎有问题或者最麻烦,因为它遍历div下的整个树.

有没有简单/优雅的方法从元素中提取非第一个文本块?

Sha*_*way 12

好吧,lxml.etree提供了完整的XPath支持,允许您解决文本项:

>>> import lxml.etree
>>> fragment = '<div>text1<span>childtext1</span>text2<span>childtext2</span>text3</div>'
>>> div = lxml.etree.fromstring(fragment)
>>> div.xpath('./text()')
['text1', 'text2', 'text3']
Run Code Online (Sandbox Code Playgroud)


lla*_*ram 6

此类文本将包含在tail元素子元素的属性中.如果您的元素在elem那时:

elem[0].tail
Run Code Online (Sandbox Code Playgroud)

会给你元素中第一个孩子的尾部文本,在你的情况下"text2"你正在寻找.