Scrapy管道中spider_opened和spider_closed未被调用
我在使用 scrapy 的管道时遇到了一些问题。我从网站上抓取的信息没问题,process_item
方法也能正常调用。但是,spider_opened
和 spider_closed
这两个方法却没有被调用。
class MyPipeline(object):
def __init__(self):
log.msg("Initializing Pipeline")
self.conn = None
self.cur = None
def spider_opened(self, spider):
log.msg("Pipeline.spider_opened called", level=log.DEBUG)
def spider_closed(self, spider):
log.msg("Pipeline.spider_closed called", level=log.DEBUG)
def process_item(self, item, spider):
log.msg("Processsing item " + item['title'], level=log.DEBUG)
虽然 __init__
和 process_item
的日志信息都能在日志中看到,但 spider_open
和 spider_close
的日志信息却没有。
我需要使用 spider_opened
和 spider_closed
方法,因为我想用它们来打开和关闭与数据库的连接,但在日志中什么也没有显示。
如果有人有建议,那将非常有帮助。
2 个回答
6
正确的方法名称是 open_spider
和 close_spider
,而不是 spider_opened
和 spider_closed
。具体的说明可以在这里找到: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline。
11
抱歉,我在发帖后刚发现这个问题。你需要添加:
dispatcher.connect(self.spider_opened, signals.spider_opened)
dispatcher.connect(self.spider_closed, signals.spider_closed)
在__init__
里面,否则它永远收不到调用的信号。