Pythonで使えるスクレイピングのライブラリの「scrapy」で、spider内でエラーが起きた時のハンドリング方法を紹介します。
手順1: middlewares.py の修正
プロジェクト作成時に、あらかじめmiddlewares.py
が自動作成されるので、これを修正します。
process_spider_exception
関数を修正します。
def process_spider_exception(self, response, exception, spider):
spider.logger.error("########")
spider.logger.error("### PROCESS_SPIDER_EXCEPTION ###")
spider.logger.error(exception)
spider.logger.error("########")
return [{
"url": response.url,
"status": response.status,
"error": str(exception),
}]
手順2: settings.py の修正
settings.py
で、SPIDER_MIDDLEWARES
がコメントアウトになっているので、コメントを外して有効にします。
# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
'myproject_scrapy.middlewares.MyprojectScrapySpiderMiddleware': 543,
}
以上で、spiderでエラーが出た時に、ログに情報を出力できます。