2010-11-06 11 views
11

Estoy teniendo problemas con un pipe pipe. Mi información está siendo eliminada de los sitios y el método process_item se está llamando correctamente. Sin embargo, los métodos spider_opened y spider_closed no se están llamando.Pipeline spider_opened y spider_closed no se llama

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) 

Tanto los __init__ y process_item mensajes de registro se displyed en el registro, pero los mensajes de registro y spider_openspider_close no lo son.

Necesito usar los métodos spider_opened y spider_closed porque 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 sería muy útil.

Respuesta

8

Lo siento, lo encontré justo después de publicar esto. Usted tiene que agregar:

dispatcher.connect(self.spider_opened, signals.spider_opened) 
dispatcher.connect(self.spider_closed, signals.spider_closed) 

en __init__ de lo contrario, nunca se recibe la señal de llamarlo

+0

Gracias por su respuesta, pero ¿dónde obtiene la variable 'dispatcher'? ¿Y cómo es que no puedo encontrar esto en http://doc.scrapy.org/en/latest/topics/item-pipeline.html? :( – wrongusername

+4

Para que esto funcione, debe asegurarse de importar lo siguiente: 'from scrapy.xlib.pydispatch import dispatcher' ' from scrapy import signals ' – herrherr

4

Los nombres propios método 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.

+1

Esto es incorrecto. 'Spider_open' y' spider_closed' son señales, no métodos. Como se documenta aquí, http://doc.scrapy.org/en/latest/topics/signals.html?highlight=spider_opened#std:signal-spider_opened y aquí http://doc.scrapy.org/en /latest/topics/signals.html?highlight=spider_closed#std:signal-spider_closed –

+1

Existen métodos llamados open_spider y close_spider, sin embargo, no están relacionados con la pregunta. –

+1

Correcto, pero ¿por qué creas los métodos spider_opened y spider_closed en tu ejemplo, ¿espera que se llamen? ¿Y por qué necesita adjuntar señales manualmente si hay métodos que ya se están llamando? –