Вывод Scrapy Crawler в Excel

Я новичок в python и scrapy, однако я пытался разработать сканер и скребок для извлечения списка продуктов на странице Amazon,

полученная информация должна иметь имя, цену и доступность. Элементы очищаются, однако каждый очищенный элемент при выводе в CSV-файл полностью находится в одной ячейке.

введите здесь описание изображения

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

Логика такова:

items= []   
    for products in response.xpath('//*[@id="mainResults"]/ul'):
       item = amazonlist()

       item['Title'] = products.css('a>h2::text').extract()
       item['Price'] = products.css(' div > div > div > a > span.a-size-base.a-color-price.s-price.a-text-bold::text').extract()
       item['Prime'] = products.css(' div > div > div > i::attr(aria-label)').extract()

       items.append(item)
    return items

Можете ли вы помочь мне с этим?


person raj shastri    schedule 22.01.2017    source источник


Ответы (2)


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

  1. Вы возвращаете все элементы сразу, а не выдаете их один за другим (ищите генераторы Python, если вы не уверены, что это значит). Попробуйте это вместо этого:

    items= []   
    for products in response.xpath('//*[@id="mainResults"]/ul'):
        item = amazonlist()
    
        item['Title'] = products.css('a>h2::text').extract()
        item['Price'] = products.css(' div > div > div > a > span.a-size-base.a-color-price.s-price.a-text-bold::text').extract()
        item['Prime'] = products.css(' div > div > div > i::attr(aria-label)').extract()
    
        yield item
    
  2. Метод extract возвращает список результатов, по одному для каждого совпадения. Если каждый экземпляр products в цикле содержит несколько продуктов, все они совпадают. Вам придется разбить запрос дальше, чтобы просмотреть каждый отдельный продукт. Вы можете использовать оператор pdb или print, чтобы проверить, например, содержит ли item['Title'] список строк, а не одну.

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

person primateer    schedule 23.01.2017
comment
Я даже пробовал этот код, я все равно получаю тот же результат. - person raj shastri; 26.01.2017
comment
Не могли бы вы опубликовать остальную часть кода и/или конкретный сайт, который вы пытаетесь очистить? - person primateer; 27.01.2017

Недавно я играл с некоторыми веб-скребками. То, как я извлекал данные с веб-страницы, заключалось в использовании lxml для получения html, а затем я сохранял его в текстовом файле, а затем сортировал его оттуда.

Надеюсь, я помог.

person Jeremy Kendrick    schedule 22.01.2017
comment
Но это все равно потребует вмешательства человека, все, что я хочу, это напрямую вывести содержимое, организованное в листе Excel. - person raj shastri; 22.01.2017