lxml - 获取元素的平面列表

Posted

技术标签:

【中文标题】lxml - 获取元素的平面列表【英文标题】:lxml - get a flat list of elements 【发布时间】:2014-12-01 03:40:42 【问题描述】:

我想展平一个 lxml etree(特别是 html,如果重要的话)。我将如何获得树中所有元素的平面列表?

【问题讨论】:

lxml.de/tutorial.html#tree-iteration How to get all sub-elements of an element tree with Python ElementTree?的可能重复 退出投票结束。我需要所有元素的完整递归列表。即 tree.flatten(). 【参考方案1】:

您可以使用.iter() 方法,如下所示:

from lxml import etree

xml = etree.XML('''<html><body>
                   <p>hi there</p><p>2nd paragraph</p>
                   </body></html>''')

# If you want to visit all of the descendants
for element in xml.iter():
    print element.tag

# Or, if you want to have a list of all the descendents
all_elements = list(xml.iter())
print [element.tag for element in all_elements]

【讨论】:

接受列表理解:elements = [ element for element in tree.iter()]。实际上,更优雅的是 list(tree.iter()) 。

以上是关于lxml - 获取元素的平面列表的主要内容,如果未能解决你的问题,请参考以下文章

python lxml - 简单地获取/检查 HTML 元素的类

如何使用 BS4 和 LXML 获取 xpath

翻译:lxml.etree教程

Python如何获取页面上某个元素指定区域的html源码?

Python如何获取这个字典中指定列表和指定元素?

使用 jquery 的 next() 函数获取列表中的下一个元素时,如何在到达列表末尾后获取第一个元素?