Scrapy:序列化不是项目类项目的项目数据

时间:2015-04-13 10:12:03

标签: python scrapy

每个产品都与大量价格页面相关联,我不希望为其创建单独的商品。相反,我喜欢将数据聚合到单个字段中,例如每种产品的价格。

目前,下面的内容是每次都会覆盖productprice字段。即productprice字段是一个包含单个项目的列表(最后产品价格已刮除)

我想保留产品的每个价格,并在商品退回后汇总这些数据。

parse_it(self, response):
    ....
    for path in links:
       yield Request(
         path,
         meta={
         'item': item_loader.load_item()
         },
          callback=self.parse_price_page,
          dont_filter=True
            )

parse_price_page(self, response):
    productname = response.meta['item']['productname']
    product_price= response.xpath("//table/tr/td/text()").extract()
    item_loader.add_value("productprice", product_price)  
    return item_loader.load_item()

1 个答案:

答案 0 :(得分:0)

首先,我没有看到你在parse_price_page()中创建了ItemLoader,但是你正在使用它。

其次,您可以使用ItemLoader.get_collected_values()来读取上次收集的值,将其添加到新值并存储。 这是一个未经考验的例子,你应该玩这个方法,直到你做对了:

def parse_price_page(self, response):
    item_loader = ItemLoader(item=response.meta['item'])
    productname = item_loader.get_collected_values('productname')
    old_price = item_loader.get_collected_values('productprice')
    new_price = response.xpath("//table/tr/td/text()").extract()[0]
    item_loader.add_value("productprice", int(old_price)+int(new_price))
    return item_loader.load_item()