获取包含文本的标签的最快方法

时间:2013-02-04 13:04:50

标签: python lxml

我需要使用lxml.html获取包含文本的所有标记。我一直在使用{e.tag for e in doc.xpath('.//*[text()= true()]')},但text()中的通配符和lxml查询都非常慢。是否有更快的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

>>> import itertools
>>> [e.tag for e in itertools.ifilter(lambda x: x.text,doc.findall('.//'))]

不确定它是否更快,但它避免了你提到的两件事(XPath通配符和text()功能)。

如果你只想使用列表(而不是迭代器),那么这种语法就更简单了:

>>> filter(lambda x: x.text,doc.findall('.//'))

如果你在找到它时处理每个标记(很可能更快),你应该使用迭代器。

答案 1 :(得分:1)

获取一组标签名称,其元素包含一些文本:

tags = {e.tag for e in doc.iter() if e.text}