0

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

4

2 回答 2

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('.//'))

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

于 2013-02-04T13:18:37.070 回答
1

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

tags = {e.tag for e in doc.iter() if e.text}
于 2013-02-04T13:47:33.547 回答