Frage

Ich habe Probleme mit einer Scrapy -Pipeline. Meine Informationen werden gekratzt, die sich in Ordnung befinden, und die Process_Item -Methode wird korrekt aufgerufen. Die Methoden Spider_Opened und Spider_closed werden jedoch nicht aufgerufen.

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)

Beide __init__ und process_item Protokollierungsnachrichten werden im Protokoll, aber die aufgegeben, aber die spider_open und spider_close Protokollierungsnachrichten sind nicht.

Ich muss die Methoden spider_opened und spider_closed verwenden, da ich sie zum Öffnen und Schließen einer Verbindung zu einer Datenbank verwenden möchte, aber nichts wird im Protokoll für sie angezeigt.

Wenn jemand vorgeschlagen hat, wäre dies sehr nützlich.

War es hilfreich?

Lösung

Entschuldigung, ich habe es kurz nachdem ich das gepostet, gefunden. Sie müssen hinzufügen:

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

in __init__ Ansonsten empfängt es das Signal nie, es anzurufen

Andere Tipps

Die richtigen Methodennamen sind open_spider und close_spider, nicht spider_opened und spider_closed. Es ist hier dokumentiert: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top