Получил тег комментария между текстом span для извлечения с помощью xpath - PullRequest
0 голосов
/ 16 октября 2018

Я могу извлечь текст из диапазона ниже:

chrome inspect

с этим xpath:

'./div/a/div/div/div/span/text()'

результат:

(12)

но, как ни странно, иногда сервер помещает теги комментариев между ними, поэтому я не могу получить желаемый результат,

review = product.xpath('./div/a/div/div/div/span/text()').extract_first()
In [1]: review
Out[2]: '('

review = product.xpath('./div/a/div/div/div/span').extract_first()

In [3]: review
Out[4]: '<span class="_2wY6y7fV">(<!-- -->12<!-- -->)</span>'

, хотя я не вижу тега комментарияна Chrome DevTools, как на первом рисунке, очень странно.

Как можно обойти теги комментариев (если они будут отображены) и получить результат?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Поэтому лучше избегать использования text () для получения текстовых узлов, вместо этого используйте string () для получения строкового значения содержащего элемента, который объединяет все текстовые узлы, пропускающие комментарии.

К сожалению, хотя некоторые приложения на основе XPath допускают только выражения, которые возвращают узлы, они не допускают выражения, которые возвращают строки, и если это имеет место в Scrapy, то вы попадаете в ловушку.

0 голосов
/ 16 октября 2018

Попробуйте

import re
reviews = "".join(product.xpath('./div/a/div/div/div/span').extract())
reviews = re.findall(r"\d+", reviews)

Я имею в виду, не используйте /text(), только получите необработанный HTML, а затем получите целочисленное значение через Regex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...