Ответ Xpath всегда возвращает ноль - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь изучить Scrapy: это URL, который я использую, чтобы собрать информацию о ценах на эту сумку."https://www.net -a-porter.com / ca / ​​en / product / 1100692 / chloe / roy-day-маленькая кожа-и-замша-сумка "

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

 yield {
        'price' : response.xpath("//nap-price[@class='product-price']/span[@itemprop='price']/text()").extract_first(),}

, возвращаемое значение всегда равно нулю.Однако, когда я запускаю его без инструментов разработчика, он говорит, что строка должна соответствовать

другим строкам, которые я пробовал:

"//nap-price[@class='product-price']/span[@class='full-price style-scope nap-price']/text()"

"//nap-price[@class='product-price']/span[2]/text()"

//nap-price[@class='product-price']/span[2]/@content

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

1 Ответ

1 голос
/ 06 июня 2019

Вы не всегда можете доверять «элементу проверки» в devtools, потому что он показывает окончательный HTML-код после его рендеринга в Javascript. Один совет - скопируйте цену, скажем «1850», откройте исходный код страницы, щелкнув правой кнопкой мыши «View Source Source» (в Firefox, что-то вроде этого в Chrome) и найдите цену на нем, чтобы увидеть, где находится источник информации. есть.

Вы найдете этот тег с полезной информацией:

<meta class="product-data"
    data-designer-name="Chloe"
    data-designer-id="122"
    data-analytics-key="Roy Day small leather and suede shoulder bag"
    data-pid="1100692"
    data-breadcrumb-names="Bags / Shoulder Bags / Cross Body"
    data-breadcrumb-keys="Bags / Shoulder_Bags / Cross_Body"
    data-breadcrumb-ids="1282 / 1335 / 6012"
    data-sold-out="false"
    data-price-full="185000"
    data-price="185000"
/>

Таким образом, вы можете написать селектор CSS, как это:

response.css('meta.product-data::attr(data-price)').extract_first()

Или с xpath:

response.xpath('//meta[@class="product-data"]/@data-price').extract_first()

Надеюсь, это поможет.

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