首页 文章

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

提问于
浏览
1

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

这是我目前的蜘蛛:

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

    你想在哪里做手法?如果你想要一个可以在整个蜘蛛中使用的通用列表,你可以使用:

    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 url,scrapy调用一个新的 parse 函数 . 因此,它每次都会重新初始化您的 items 列表 .

相关问题