我正在进行一个项目,在这个项目中,我抓取网络以获取各种家具并获得其属性。我使用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,我觉得我不能有效地使用它。 我会感激任何建议。 还有一个额外的问题:管道做什么以及我应该在哪些情况下使用它。我已经阅读了官方文件,但我觉得我需要一个简单的解释。
谢谢。
答案 0 :(得分:0)
我不了解用例,即为什么你真的需要响应计数。根据如何实现存储逻辑,您可以将项目放在某个可迭代项中(您可以迭代并且不需要事先计算),或者使用项目管道逐个存储项目,因为它们通过管道
项目管道用于处理从Scrapy引擎返回的项目。您可以修改项目,根据项目的值执行操作或丢弃它们。我认为文档中的examples非常具有说明性。此外,您可以查看Scrapy architecture以查看整体情况以及管道所在的位置。