Question

J'ai des problèmes avec un pipeline de scracy. Mes informations sont en cours de gratter les sites OK et la méthode process_item est appelée correctement. Cependant, les méthodes Spider_Openned et Spider_Closed ne sont pas appelées.

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)

Les deux __init__ et process_item Les messages de journalisation sont contestés dans le journal, mais le spider_open et spider_close Les messages de journalisation ne le sont pas.

J'ai besoin d'utiliser les méthodes Spider_Openned et Spider_Closed car je veux les utiliser pour ouvrir et fermer une connexion à une base de données, mais rien ne s'affiche dans le journal pour eux.

Si quelqu'un en a suggéré, ce serait très utile.

Était-ce utile?

La solution

Désolé, je l'ai trouvé juste après avoir posté ceci. Vous devez ajouter:

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

dans __init__ Sinon, il ne reçoit jamais le signal pour l'appeler

Autres conseils

Les noms de méthode appropriés sont open_spider et close_spider, ne pas spider_opened et spider_closed. Il est documenté ici: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top