Scrapy получить результат в оболочке, но не в сценарии - PullRequest
0 голосов
/ 06 ноября 2018

еще одна тема ^^ На основании рекомендаций, приведенных здесь, я реализовал свой бот следующим образом и проверил все это в оболочке:

    name_list = response.css("h2.label.title::text").extract()
    packaging_list = response.css("div.label.packaging::text").extract()
    ean = response.css("h1.page-title::text").extract_first()
    product_price = ''.join(response.css('.product-pricing__main-price  ::text').extract())
    company = "carrefour"

    for name, packaging, price in zip(name_list, packaging_list, product_price):
        item = ScrapybotItem()
        item['ean'] = ean
        item['desc'] = name.replace("\n","").strip() + " " +  packaging
        item['price'] = price
        item['company'] = company

        yield item

Проблема с ценовым полем.

Для цены в оболочке у меня есть, например:

In [2]: product_price
Out[2]: '\n                    5,65€\n\n  \n      '

Вывод из скрипта для того же продукта:

{'company': 'carrefour',
'desc': "Gel nettoyant anti-imperfections 5 en 1 L'Oréal Paris Men Expert 
 le "
     'tube de 150ml',
 'ean': '\n  1 résultat pour « 3600522418634 »\n',
 'price': '\n'}

Знаете ли вы, почему я не получаю результат по ценам со сценарием?

1 Ответ

0 голосов
/ 06 ноября 2018

product_price - строка, если вы объединяете результаты селектора в:

product_price = ''.join(response.css('.product-pricing__main-price  ::text').extract())

Затем, когда вы используете zip, вы будете разбивать эту строку на части, поэтому у вас будет \n для первого элемента, так как это, вероятно, первый символ в product_price.

Проверьте этот пример:

>>> for i, j, k in zip([1, 2, 3, 4], [5, 6, 7, 8], 'abcd'):
        print (i, j, k)

Выход:

1 5 a
2 6 b
3 7 c
4 8 d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...