Соскоб с Python - проблема XPath - PullRequest
0 голосов
/ 22 февраля 2020

Я сейчас нахожусь в процессе изучения соскоба и следую учебному пособию на Youtube. Учебное пособие использует «Scrapy», и мне удалось очистить данные с веб-сайта, предварительно просмотренного в учебном пособии. Тем не менее, теперь я попытался очистить другой сайт безуспешно.

Насколько я понимаю, проблема в Xpath, который я использую. Я пробовал несколько сайтов по тестированию / генерации Xpath, но безуспешно.

Это следующий XML код:

<div class="price" currentmouseover="94">
<del currentmouseover="96">
<span class="woocommerce-Price-amount amount" currentmouseover="90"><span class="woocommerce-Price-currencySymbol">€</span>3.60</span>
</del>
<ins><span class="woocommerce-Price-amount amount" currentmouseover="123"><span class="woocommerce-Price-currencySymbol" currentmouseover="92">€</span>3.09</span></ins></div>

В настоящее время я использую следующий код:

 def parse(self,response):
    for title in response.xpath("//div[@class='Price']"):
        yield {
            'title_text': title.xpath(".//span[@class='woocommerce-Price-amount amount']/text()").extract_first()
        }

Я также пытался использовать // span [@ class = 'woocommerce-Price-amount amount'].

Я хочу, чтобы мой вывод был '3.09', вместо этого я получаю нулевое значение, когда экспортирую его в файл JSON. Может кто-нибудь направить меня в правильном направлении?

Заранее спасибо.

Обновление 1: Мне удалось решить проблему с ответом Джека Флитинга. Так как у меня были проблемы с пониманием Xpath, я пробовал разные веб-сайты, чтобы лучше понять, как работает Xpath. К сожалению, я застрял в другом примере.

<div class="add-product"><strong><small>€3.11</small> €3.09</strong></div>

Я использую следующий фрагмент:

 l.add_xpath('price', ".//div[@class='add-product']/strong[1]")

Я ожидаю вывести 3.09, однако я вывожу оба числа. Я пытался использовать минимальную функцию, но Xpath 1.0 не поддерживает ее. ie: поскольку я хотел вывести фактическое (дисконтированное) значение элемента

1 Ответ

1 голос
/ 23 февраля 2020

Попробуйте это выражение xpath и посмотрите, работает ли оно:

//div[@class='price']/ins/span

Обратите внимание, что price в нижнем регистре, как у вас html.

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