Организовать предметы через Scrapy Pipeline - PullRequest
0 голосов
/ 06 ноября 2018

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

def parse(self, response):
    sel = Selector(response)
    price_list = sel.css("li.lvprice.prc span::text").extract()
    price_list = [itemprice.replace("\t","").replace("\n","").strip() for itemprice in price_list]
    desc_list = sel.css("h3.lvtitle a::text").extract()
    desc_list = [itemdesc.replace("\t","").replace("\n","").strip() for itemdesc in desc_list]
    for price, desc in zip(price_list, desc_list):
        yield {
            'ean': sel.css("span.kwcat b::text").extract_first(), 'price':price, 'desc':desc
        }

Пример вывода:

3596206198001,"4,43",Weleda - Savon Végétal au Calendula - 100 g

3596206198001,"4,08",WELEDA Savon Végétal au Calendula Bain et douche - 100 g

Теперь, однако, я пытаюсь запустить несколько пауков одновременно через простой файл (с этой частью все в порядке) и анализировать результаты через элементы и конвейер. Итак, вот код для функции разбора:

def parse(self, response):
    item = ScrapybotItem()
    item['ean'] = response.css("span.kwcat b::text").extract()
    price_list = response.css("li.lvprice.prc span::text").extract()
    item['price'] = [itemprice.replace("\t","").replace("\n","").strip() for itemprice in price_list]
    desc_list = response.css("h3.lvtitle a::text").extract()
    item['desc'] = [itemdesc.replace("\t","").replace("\n","").strip() for itemdesc in desc_list]

    return item

И ... Результат с экспортером элементов CSV:

['EAN'],"['19,95', '', '1,00', '', 'à', '49,99', '', '1,00', '1,13', '19,95', '', '1,13', '', 'à', '205,56', '', '0,01', '', '1,13', '', 'à', '1\xa0370,47', '', '1,20', '1,00', '12,50', '1,13', '10,85', '34,90', '19,95', '19,95', '195,00', '17,13', '22,09', '33,09', '37,49', '485,00', '6,00', '19,95', '19,95', '26,95', '2,85', '29,95', '1,85', '39,00', '489,00', '1\xa0099,00', '1\xa0755,00', '1\xa0645,00', '', '1,14', '', 'à', '11,42', '', '755,00', '11,00', '15,49', '8,57', '14,99', '599,00', '12,90', '136,90', '4,45', '10,00', '3,29', '18,90', '18,90', '1,49', '2,97', '2,42', '12,99', '6,83', '2,97', '12,26', '49,50', 'Prix de mise en vente\xa0:', 'Prix de vente initial', '55,00 EUR']","['67811 Boondock Saints Movie ean Patrick Flanery FRAMED CANVAS PRINT Toile', 'EAN CODE', '15 EAN Code barres Barcodes chiffres codes barres pour Amazon', '50 UPC & EAN Code-barres codes chiffres bar code codes barres pour Amazon', '65518 Dr. No Movie ean Connery rsula Andress FRAMED CANVAS PRINT Toile', 'Code-Barres EAN 13 Upc Codes-barres Bar code chiffres pour Amazon et eBay 20 - 1...', 'EAN/UPC numéro/Bar Code QR pour Ebay et Amazon - 1p enchère (OS-016) C', 'UPC EAN chiffres des codes barres Bar code Amazon UK UE Garantie à vie' [...]

Так как организовать вывод CSV с конвейером? Я хотел бы, чтобы все поля для одного элемента были в одной строке ... Например:

EAN, 19,95, 67811 Boondock Saints Movie ean Patrick Flanery FRAMED CANVAS 
PRINT Toile...

Я искал, но не нашел простых примеров о том, как реорганизовать вывод товара! И извините, если это глупый вопрос :) Я учу Python в то же время, что я учусь scrapy!

1 Ответ

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

Я думаю, что вы можете достичь того, что вы хотите, с помощью простого цикла:

def parse(self, response):
    ean = response.css("span.kwcat b::text").extract_first()
    price_list = response.css("li.lvprice.prc span::text").extract()
    desc_list = response.css("h3.lvtitle a::text").extract()

    for price, desc in zip(price_list, desc_list):
        item = ScrapybotItem()

        item['ean'] = ean
        item['price'] = price.replace("\t","").replace("\n","").strip()
        item['desc'] = desc.replace("\t","").replace("\n","").strip()

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