循环响应将项目保存到数据库(Django,Scrapy)

时间:2017-07-11 08:53:56

标签: python django scrapy web-crawler

我正在进行一个项目,在这个项目中,我抓取网络以获取各种家具并获得其属性。我使用DjangoItem将这些数据保存到我的数据库中。我的问题是让响应计数在for循环中使用它。我不知道这是否是最佳方式(可能不是)。这是我的蜘蛛:

    def parse(self, response):
    now = timezone.now()
    for item in response.css('.page-content-area'):

        for i in range(5):
            furnitureItem = FurnitureItem()
            furnitureItem['furniture_type'] = 'Chair'
            furnitureItem['name'] = item.css('h2 a::text').extract()[i]
            furnitureItem['description'] = item.css('a span::text').extract()[i]
            furnitureItem['href'] = item.css('h2 a::attr(href)').extract()[i]
            furnitureItem['img_source'] = item.css('.lazy::attr(data-original)').extract()[i]
            furnitureItem['price'] = item.css('.mt3::text').extract()[i]
            furnitureItem['last_update'] = now
            yield furnitureItem

此处的每个键都有多个值。我循环了5次,看它是否将5个项目保存到数据库中。确实如此。我想要的是得到响应的计数在这个循环中使用它。我刚开始使用Scrapy,我觉得我不能有效地使用它。 我会感激任何建议。 还有一个额外的问题:管道做什么以及我应该在哪些情况下使用它。我已经阅读了官方文件,但我觉得我需要一个简单的解释。

谢谢。

1 个答案:

答案 0 :(得分:0)

我不了解用例,即为什么你真的需要响应计数。根据如何实现存储逻辑,您可以将项目放在某个可迭代项中(您可以迭代并且不需要事先计算),或者使用项目管道逐个存储项目,因为它们通过管道

项目管道用于处理从Scrapy引擎返回的项目。您可以修改项目,根据项目的值执行操作或丢弃它们。我认为文档中的examples非常具有说明性。此外,您可以查看Scrapy architecture以查看整体情况以及管道所在的位置。