Не могу получить текст из области Scrap python - PullRequest
0 голосов
/ 06 февраля 2020

Итак, я создаю бота, чтобы получить цену и имя от продуктов Zara, и мне удалось получить название продукта, но цена, которую он возвращает [].

Вот мой код:

#!/usr/bin/python3
#-*- coding: utf-8 -*-

import scrapy

class Zara(scrapy.Spider):
    name = 'Zara'

def start_requests(self, url='https://www.zara.com/pt/pt/casaco-l%C3%A3-quadrados-p02092540.html?v1=42984974&v2=1445646'):
    yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    try:
        name = response.xpath('//*[@id="product"]/div[1]/div/div[2]/header/h1/text()').get()
        price = response.xpath('//*[@id="product"]/div[1]/div/div[2]/div[1]/span/text()').get()
    except:
        print('Fail')

    print(name)
    print(price)

Что он возвращает:

CASACO LÃ QUADRADOS
[]

Что он должен вернуть:

CASACO LÃ QUADRADOS
149,00 EUR

Все, что я пытался:

price = response.xpath('//*[@id="product"]/div[1]/div/div[2]/div[1]/span').get()
price = response.xpath('//*[@id="product"]/div[1]/div/div[2]/div[1]/span/text()').get()
price = response.xpath('//*[@id="product"]/div[1]/div/div[2]/div[1]/span[@class="main-price"]').get()
price = response.xpath('//*[@id="product"]/div[1]/div/div[2]/div[1]/span[@class="main-price"]/text()').get()

Я думаю, что это все Я старался! Я использую Scrapy версии 1.8 с python 3.7

1 Ответ

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

Причина, по которой вы не получаете цену, используя обычный подход 'xpath / css', заключается в том, что поле 'цена' не доступно вашему сканеру напрямую. Ваш сканер видит страницы по-разному, поэтому xpath (s) совершенно разные.

Попробуйте этот подход:

from re import search

_script = response.xpath("//script[contains(text(),'price')][1]")[0].extract()
price = search ( r",.price.:(\d+)", _script ).group(1)

Более того, лучше использовать другую попытку ... за исключением отдельных полей , чтобы вы знали, в каком именно разделе произошла ошибка, для дальнейшего исправления.

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