l xml .etree.XPathEvalError: неверный предикат - PullRequest
0 голосов
/ 03 февраля 2020

Я получаю следующее 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, в l xml .etree._Element.xpath

Файл "src \ lxml \ xpath.pxi", строка 305, в l xml .etree.XPathElementEvaluator. вызов

Файл "src \ lxml \ xpath.pxi", строка 225, в l xml .etree._XPathEvaluatorBase._handle_result

l xml .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)

Можете ли вы помочь мне выяснить причину этой ошибки?

1 Ответ

0 голосов
/ 03 февраля 2020

Взгляните на rootcontainer в вашем find звонке. До этого слова вы поставили двойную кавычку (это нормально), но не смогли поставить еще одну двойную кавычку после it.

Другая деталь: Чуть позже у вас есть: @ class = "_7om2 _3gim _ 7cdk" .

Вы уверены, что здесь должно быть четыре класса ( _7om2 , _3gim , _ и 7cdk )?

Использование "_" в качестве имени класса - странная практика. Может быть, вместо 2 последних классов должен быть один класс _7cdk ? Обратите внимание, что чуть раньше у вас просто _7cdk .

Этот недостаток вряд ли вызовет какое-либо исключение, но результат find , вероятно, будет пустым. Будьте осторожны при написании таких предикатов, так как подобные ошибки довольно трудно идентифицировать.

...