12

XPath 式を使用して、lxml で HTML を解析したいと考えています。私の問題は、タグのコンテンツのマッチングです:

たとえば、

<a href="http://something">Example</a>

要素を使用して href 属性を一致させることができます

.//a[@href='http://something']

しかし、与えられた式

.//a[.='Example']

あるいは

.//a[contains(.,'Example')]

lxml が「無効なノード述語」例外をスローします。

私は何を間違っていますか?

編集:

コード例:

from lxml import etree
from cStringIO import StringIO

html = '<a href="http://something">Example</a>'
parser = etree.HTMLParser()
tree   = etree.parse(StringIO(html), parser)

print tree.find(".//a[text()='Example']").tag

期待される出力は「a」です。「SyntaxError: 無効なノード述語」が表示される

4

1 に答える 1

20

私は試してみます:

.//a[text()='Example']

xpath() メソッドを使用:

tree.xpath(".//a[text()='Example']")[0].tag

iterfind()、findall()、find()、findtext() を使用する場合は、値の比較や関数などの高度な機能はElementPathでは使用できないことに注意してください。

lxml.etreeは、元の ElementTree ライブラリ (ElementPath) で知られているように、ElementTree と Element の find、findall、findtext メソッドの単純なパス構文をサポートしています。これらのクラスは、lxml 固有の拡張機能として、完全な XPath 構文の式とカスタム拡張関数をサポートする xpath() メソッドも提供します。

于 2010-04-14T13:54:02.127 に答える