使用 text() 时 lxml 谓词无效

Pri*_*ett 2 html python lxml

我正在使用lxml进行 HTML 屏幕抓取,并且需要通过 选择一个元素text(),其方式类似于使用纯 XML 在另一个问题上所做的操作,但是无论发生什么情况,我都会收到无效谓词错误。我将其简化为以下示例:

import lxml.html
sample_html = "<div><h2>test string</h2><h2>other string</h2></div>"
sample_tree = lxml.html.fromstring(sample_html)
sample_tree.findall('.//h2[text()="test string"]')
Run Code Online (Sandbox Code Playgroud)

虽然这应该是有效的,但我不断收到错误:

  File "<string>", line unknown
SyntaxError: invalid predicate
Run Code Online (Sandbox Code Playgroud)

text()有关如何在解析 HTML 时正确让 lxml 选择元素的任何提示吗?

ale*_*cxe 5

表达式本身是有效的,但你必须使用该.xpath()方法:

sample_tree.xpath('.//h2[text()="text string"]')
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下您也可以使用以下.内容来代替text()

.//h2[. = "text string"]
Run Code Online (Sandbox Code Playgroud)