【问题标题】:Scrapy extension: spider_closed is not calledScrapy 扩展:spider_closed 没有被调用
【发布时间】:2015-02-27 15:10:46
【问题描述】:

我有一个附加到 spider_opened 和 spider_closed 的扩展。正确调用了 spider_opened 方法,但没有正确调用 spider_closed 方法。我通过调用 scrapyd 取消端点来关闭蜘蛛。

class SpiderCtlExtension(object):

   @classmethod 
   def from_crawler(cls, crawler):
       ext = SpiderCtlExtension()

       ext.project_name = crawler.settings.get('BOT_NAME')
       crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened)
       crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed)

       return ext

   def spider_opened(self, spider):
       sql = """UPDATE ctl_crawler
             SET status = 'RUNNING'
             WHERE jobid = '{}'  """.format(os.getenv("SCRAPY_JOB"))
       engine.execute(sql)

   def spider_closed(self,spider,reason):
       sql = """UPDATE ctl_crawler
             SET status = '{}'
             WHERE jobid = '{}'  """.format(reason.upper(),os.getenv("SCRAPY_JOB"))
       engine.execute(sql)

我在这里做错了吗?

【问题讨论】:

  • 你确定它根本没有被调用吗?您是否尝试在信号处理程序中放置打印语句以进行调试?
  • 另外,项目中是否定义了其他spider_closed信号?
  • @alecxe 我不知道。而至于是否调用,至少数据库入口没有更新,这里在spider_opened方法中更新。

标签: python scrapy scrapyd


【解决方案1】:

这是一个(特定于 Windows 的)错误,请参阅我的错误报告 https://github.com/scrapy/scrapyd/issues/83

原因是取消方法的工作方式,没有调用蜘蛛进程中的关闭处理程序。

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多