首页 > 解决方案 > lxml.etree.XPathEvalError:无效的谓词

问题描述

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

回溯(最近一次通话最后):

文件“check_1337.py”,第 18 行,在

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

文件“src\lxml\etree.pyx”,第 1583 行,位于 lxml.etree._Element.xpath

文件“src\lxml\xpath.pxi”,第 305 行,在 lxml.etree.XPathElementEvaluator 中。称呼

文件“src\lxml\xpath.pxi”,第 225 行,在 lxml.etree._XPathEvaluatorBase._handle_result

lxml.etree.XPathEvalError:无效的谓词

从以下代码:

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)

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

标签: python-3.6lxml

解决方案


find调用 中查看rootcontainer 。这个词之前你放了一个双引号(这没关系),但没能它后面放另一个双引号。

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

您确定这里应该有四个类(_7om2_3gim_7cdk)吗?

使用“_”作为类名是一种奇怪的做法。也许应该有一个_7cdk而不是最后 2 个类?请注意,稍早您只有_7cdk

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


推荐阅读