lxml.etree.XPathEvalError: Invalid predicate

lxml.etree.XPathEvalError: Invalid predicate

我收到以下 lxml.etree.XPathEvalError: Invalid predicate 错误:

Traceback (most recent call last):

File "check_1337.py", line 18, in

//div[@class = "_3iyw"]//div[@class = "_6beq _7cdk _6beo"]//div[@class = "_7om2 _3gim _ 7cdk"]//div [@class = "5s61"]//div[@class = "_7cdi"]')

File "src\lxml\etree.pyx", line 1583, in lxml.etree._Element.xpath

File "src\lxml\xpath.pxi", line 305, in lxml.etree.XPathElementEvaluator.call

File "src\lxml\xpath.pxi", line 225, in lxml.etree._XPathEvaluatorBase._handle_result

lxml.etree.XPathEvalError: Invalid predicate

来自以下代码:

from lxml.etree import HTML
import requests

url = "https://m.facebook.com/?_rdr"
response = requests.get(url)
root = HTML(response.content)

tempII = root.find("body").xpath('//div[@id = "viewport"]//div[@id = "page"]//div[@id = "rootcontainer]//div[@class = "async_compose _2v9s"]//div[@id = "MRoot"]\
//div[@class = "_3iyw"]//div[@class = "_6beq _7cdk _6beo"]//div[@class = "_7om2 _3gim _ 7cdk"]//div [@class = "5s61"]//div[@class = "_7cdi"]')

print (tempII)

你能帮我找出这个错误的原因吗?

在您的 find 调用中查看 rootcontainerBefore 这个词你放一个双引号(这样可以), 但未能在 之后添加另一个双引号

另一个细节:稍后你有:@class = "_7om2 _3gim _ 7cdk".

你确定这里应该有四个class吗(_7om2,_3gim, _7cdk)?

使用“_”作为 class 名称是一种奇怪的做法。 也许最后 classes 应该是 one class _7cdk? 请注意,早些时候您只有 _7cdk.

这个缺陷不太可能导致任何异常,但是 find 的结果 可能会是空的。 写这样的谓词时要小心,因为这样的错误很常见 难以识别。