我目前正在使用Scrapy 0.24废弃一个网站.该网站具有以下网址格式:
www.site.com?category={0}&item={1}&page={2}
Run Code Online (Sandbox Code Playgroud)
我有一个MySQLStorePipeline
负责将每个报废项目存储在数据库中.但我有80个类别,10个项目和15个页面,这导致80 * 10 * 15 = 120000
页面.每页我产生25 scrapy.Item
秒,这给了我们25 * 120000 = 3000000
数据库中的行.
因此,每次管道收到一个项目时,它都会插入到数据库中.这不是一个聪明的方式.我正在寻找缓冲管道项的方法,例如,当我们收到1000个项目时,执行批量插入.我怎样才能做到这一点?
让管道将项目存储在列表中,并在它们达到一定长度时插入它们,并在关闭蜘蛛时插入它们.
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()
Run Code Online (Sandbox Code Playgroud)