我有一个附加到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)
我在这里做错了吗?
答案 0 :(得分:0)
这是一个(特定于Windows的)错误,请参阅我的错误报告https://github.com/scrapy/scrapyd/issues/83
原因是cancel方法的工作方式,不会调用spider进程中的shutdown处理程序。