python-3.6 - 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)
你能帮我找出这个错误的原因吗?
解决方案
在find调用 中查看rootcontainer 。在这个词之前你放了一个双引号(这没关系),但没能在它后面放另一个双引号。
另一个细节:稍后你有:@class = "_7om2 _3gim _ 7cdk"。
您确定这里应该有四个类(_7om2、_3gim、 _和7cdk)吗?
使用“_”作为类名是一种奇怪的做法。也许应该有一个类_7cdk而不是最后 2 个类?请注意,稍早您只有_7cdk。
这个缺陷不太可能导致任何异常,但是find的结果 很可能会是空的。在编写此类谓词时要小心,因为这样的错误很难识别。
推荐阅读
- dart - Flutter Drawer 作为单独的小部件不允许修改宽度
- excel - 将代码添加到现有模块:删除第 2 行中的重复值
- kubernetes - Kubernetes模式金丝雀部署冒烟测试最佳实践?
- ruby-on-rails - 存储图像以测试上传和删除的好方法是什么?
- algorithm - 在集合列表中找到相似集合的有效方法
- kotlin - 提供具有 Dagger 多绑定依赖项的实例时出错
- android - MockitoJUnit 测试在 Android Studio 中运行但在命令行上运行时失败
- azure - 复制期间的 Azure Cosmos DB 限制
- c# - 如何交换存储在 C# 中二维列表中的两个对象?
- android - 带重音的 Volley 参数,作为特殊字符 (�) 发送