Scrapy+twisted 异步MySQL批量提交不报错
在正常情况下,默认1000个item执行一次插入,如果爬虫爬取结束,就将剩下的都插入
每1000个的插入如果出错,会报出来(跳到处理函数)
def process_item(self, item, spider):
if type(item) not in self.item_list.keys():
self.item_list[type(item)] = {"sql": item.get_insert_sql(), "items": []}
self.item_list[type(item)]["items"].append(item.get_insert_param())
if len(self.item_list[type(item)]["items"]) >= self.mysql_item_list_limit:
self.do_insert(deepcopy(self.item_list[type(item)]))
self.item_list[type(item)]["items"].clear()
return item
def do_insert(self, item_list, retrying=False):
query = self.dbpool.runInteraction(self.do_sql, item_list)
query.addCallback(self.handle_result, item_list)
query.addErrback(self.handle_error, item_list, retrying)
def do_sql(self, cursor, item):
cursor.executemany(item["sql"], item["items"])
def handle_result(self, result, item_list):
self.spider.logger.info('{} items inserted with retcode {}'.format(len(item_list["items"]), result))
def handle_error(self, failure, item_list, retrying):
self.spider.logger.error(failure, item_list)
在爬虫结束,调用pipline的close_spider函数,把剩下的插入,但是有错误不会报错
def close_spider(self, spider):
for items in self.item_list.values():
self.do_insert(items)
断点,一步步跟进去,驱动确实捕捉到了错误,但是没有跳到处理函数(两个都没有执行),
实际上在这里写个 1/0 都不会报错…
这怎么搞?