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

Python 获取包含文本的标记的最快方法,python,lxml,Python,Lxml,我需要使用lxml.html获取所有包含文本的标记。我一直在使用doc.xpath('./*[text()=true()]')中的e的{e.tag},但是lxml中的通配符和text()查询速度都非常慢。有没有更快捷的方法呢。你可以试试这个: >>> import itertools >>> [e.tag for e in itertools.ifilter(lambda x: x.text,doc.findall('.//'))] 不确定它是否更快,但它避

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

你可以试试这个:

>>> import itertools
>>> [e.tag for e in itertools.ifilter(lambda x: x.text,doc.findall('.//'))]
不确定它是否更快,但它避免了您提到的两件事(XPath通配符和
text()
函数)

如果只想使用列表(而不是迭代器),则此语法更简单:

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

如果您按找到的方式处理每个标记,则应使用迭代器(很可能更快)。

要获得一组标记名,其元素包含一些文本:

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

你能提供一些测试数据吗?性能可能取决于输入数据的特征。你需要多快的速度?谢谢,这将它从1.3毫秒减少到400毫秒,这足够加速了。