2017-01-22 67 views
0

我是新来的Python和scrapy,但我试图建立一个履带式和刮刀提取亚马逊页面上的产品列表,Scrapy履带输出到Excel

刮下的信息必须有名称,价格和优越的可用性。物品被刮掉,但是每个物品被刮掉的时候都是在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实例本身都包含多个产品,则它们都匹配。您将不得不进一步分解查询以遍历每个单独的产品。您可以使用pdbprint语句来检查,例如,item['Title']是否包含字符串列表而不是一个字符串列表。

希望这有助于!

+0

我甚至试过这段代码,我仍然得到相同的输出。 –

+0

您可以发布剩余的代码和/或您试图抓取的特定网站吗? – primateer