SCRAPY Pipeline Spider_opened y Spider_Closed no llamado
Pregunta
Estoy teniendo algunos problemas con una tubería de rasguños. Mi información se está raspando los sitios de formulario bien y el método Process_Item se llama correctamente. Sin embargo, no se llaman a los métodos Spider_opened y 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)
Ambos __init__
y process_item
Los mensajes de registro se desplazan en el registro, pero el spider_open
y spider_close
Los mensajes de registro no lo son.
Necesito usar los métodos Spider_opened y Spider_Closed, ya que quiero usarlos para abrir y cerrar una conexión a una base de datos, pero no aparece nada en el registro para ellos.
Si alguien ha sugerido que sea muy útil.
Solución
Lo siento, lo encontré justo después de publicar esto. Tienes que agregar:
dispatcher.connect(self.spider_opened, signals.spider_opened)
dispatcher.connect(self.spider_closed, signals.spider_closed)
en __init__
de lo contrario, nunca recibe la señal para llamarlo
Otros consejos
Los nombres de métodos adecuados son open_spider
y close_spider
, no spider_opened
y spider_closed
. Está documentado aquí: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline.