0

を使用して、テキストを含むすべてのタグを取得する必要がありますlxml.html。私はを使用しています{e.tag for e in doc.xpath('.//*[text()= true()]')}が、ワイルドカードとtext()クエリの両方lxmlが遅いことで有名です。それを行うためのより迅速な方法はありますか?

4

2 に答える 2

1

要素にテキストが含まれる一連のタグ名を取得するには:

tags = {e.tag for e in doc.iter() if e.text}
于 2013-02-04T13:47:33.547 に答える
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 に答える