【发布时间】: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方法中更新。