2017-01-22 3 views
0

Я новичок в Python и Scrapy, однако я пытался разработать искатель и скребок для извлечения списка продуктов на Амазонка страницеScrapy Гусеничные первенствую выход

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

enter image description here

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

Логика:

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 

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

ответ

0

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

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

+1

Но это все равно потребует вмешательства человека, все, что я хочу, - это напрямую выводить содержимое, размещенное на листе excel. –

0

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

  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'] список строк, а не один.

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

+0

Я даже пробовал этот код, я все равно получаю тот же результат. –

+0

Не могли бы вы опубликовать остальную часть кода и/или конкретный сайт, который вы пытаетесь очистить? – primateer

Смежные вопросы