Python LXML XPATH возвращает ошибку с правильным запросом - PullRequest
0 голосов
/ 06 февраля 2019

Я выполняю следующий запрос:

//div[@class="review-list"]//div[@class="review review--with-sidebar"]//div[@class="review-content"]/p/string(.)

Я получаю следующую ошибку:

lxml.etree.XPathEvalError: Неверное выражение

Однако, если я использую следующие обозначения:

//div[@class="review-list"]//div[@class="review review--with-sidebar"]//div[@class="review-content"]/p/text()

Все хорошо.

Я предполагаю, что проблема связана с использованием нотации string(.), но когда я проверяю ее здесь , она подходит нормально, поэтому я предполагаю ее правильный синтаксис.

По сути, я запускаю следующий код:

from lxml import html
tree = html.fromstring(PAGE_CONTENT)
results = tree.xpath(QUERY)

Есть ли альтернативный метод, который я мог бы использовать, который позволит использовать выражения, подобные этому?string-join кажется, вызывает подобные проблемы.

1 Ответ

0 голосов
/ 06 февраля 2019

Причина вашей ошибки в том, что запись

.../string(.)

действительна только в XPath 2.0 или выше.В XPath 1.0 это неверно и выдает ошибку.

Альтернативой, допустимой в XPath-1.0, было бы обертывание всего выражения в функцию string(...), например, так:

string(//div[@class="review-list"]//div[@class="review review--with-sidebar"]//div[@class="review-content"]/p)
...