我想使用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:无效节点谓词'
答案 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语法,以及 自定义扩展功能。