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.

¿Fue ú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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top