在Scrapy的单个列表中附加产品名称

时间:2013-05-04 02:38:29

标签: python list append scrapy

我目前的scrapy蜘蛛根据需要从网站上提取产品名称,但将每个start_url的提取放在一个单独的['product']列表中。我希望所有start_url提取都放在一个列表中(对于每个相应的类类型:产品,价格等),这样我就可以在将来操作提取时从列表中调用每个产品标题。

这是我现在的蜘蛛:

 from scrapy.spider import BaseSpider
 from scrapy.selector import HtmlXPathSelector
 from proj.items import projItem

 class siteSpider(BaseSpider):
     name = "newSpider"
     allowed_domains = ["http://www.sample.url/"]
     start_urls = [
         "http://sample1.url",
         "http://sample2.url"
             ]

     def parse(self, response):
         hxs = HtmlXPathSelector(response)
         items = []
         item = FlecheNoireItem()
         item ["product"] = hxs.select('//h2/a[contains(@class,"next_prev")]/text()').extract()
         items.append(item)
         return items

1 个答案:

答案 0 :(得分:0)

你想在哪里进行操作?如果你想要一个可以在整个蜘蛛中使用的通用列表,你可以使用:

class siteSpider(BaseSpider):
    ...
    generic_dict = {'product': [], 'price': [], 'etc': []}
    ...

    def parse(self, response):
        ...
        self.generic_dict['product'].append(hxs.select(...))
        ...

    def manipulations(self):
        ...manipulations here...
        return self.generic_dict

您拥有所有这些不同列表的原因是因为对于每个start_urls网址,scrapy会调用一个新的parse函数。因此,它每次都会重新初始化您的items列表。