Python 使用scrapy的缓冲管道
我目前正在使用一个废弃的网站。该网站具有以下url格式:Python 使用scrapy的缓冲管道,python,scrapy,Python,Scrapy,我目前正在使用一个废弃的网站。该网站具有以下url格式: www.site.com?category={0}&item={1}&page={2} 我有一个MySQLStorePipeline,负责将每个报废项目存储在数据库中。但我有80个类别,10个项目和15页,结果是80*10*15=120000页。每一页I产生25个scrapy.Items,这给了我们数据库中的25*120000=3000000行 因此,每次管道接收到一个项目时,它都会插入到数据库中。这不是一个聪明的方法。
www.site.com?category={0}&item={1}&page={2}
我有一个MySQLStorePipeline
,负责将每个报废项目存储在数据库中。但我有80个类别,10个项目和15页,结果是80*10*15=120000
页。每一页I产生25个scrapy.Item
s,这给了我们数据库中的25*120000=3000000
行
因此,每次管道接收到一个项目时,它都会插入到数据库中。这不是一个聪明的方法。我正在寻找一种缓冲管道项目的方法,例如,当我们收到1000个项目时,执行批量插入。如何实现这一点?让管道将项目存储在列表中,并在达到一定长度时插入它们,然后在spider关闭时插入
class Pipeline(object):
def __init__(self):
super(Pipeline, self).__init__()
self.items = []
def process_item(self, item, spider):
self.items.append(item)
if len(self.items) >= 1000:
self.insert_current_items()
return item
def insert_current_items(self):
items = self.items
self.items = []
self.insert_to_database(items)
def close_spider(self, spider):
self.insert_current_items()
你已经用蜘蛛关闭信号分析过场景了吗?@aberna还没有。你有什么建议吗?@aberna根据消息,我无法接触到这个信号中的废弃物品。只有蜘蛛本身和蜘蛛被关闭的原因。在这里,一些人提出了一种方法。当你拦截蜘蛛信号时,你可以跟踪你的物品并一起处理它们。我现在感到惭愧。我怎么能不去想呢?@Doon我也有同感:D我想我们在寻找某种内置的“支持”(因此更好,咳嗽)方式。很好的解决方案。唯一的问题——当一批产品少于1000件时会发生什么?其余的记录不会被插入。@BenWilson这就是为什么它也会在
close\u spider
事件中插入。