如何匹配XPath(lxml)中元素的内容?

时间:2010-04-14 13:35:16

标签: python xpath lxml predicate

我想使用XPath表达式使用lxml解析HTML。我的问题是匹配标签的内容:

例如给出

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

元素我可以使用

匹配href属性
.//a[@href='http://something']

但是给出了表达式

.//a[.='Example']

甚至

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

lxml抛出'invalid node predicate'异常。

我做错了什么?

修改

示例代码:

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:无效节点谓词'

1 个答案:

答案 0 :(得分:19)

我会尝试:

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

使用xpath()方法:

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

如果您想使用iterfind(),findall(),find(),findtext(),请记住{{>>值比较和函数等高级功能在{{{ 3}}

  

lxml.etree 支持简单路径   find,findall和。的语法   ElementTree和的findtext方法   元素,从原来知道   ElementTree库(ElementPath)。如   一个lxml特定扩展,这些   类还提供了一个xpath()方法   支持表达式   完整的XPath语法,以及   自定义扩展功能。