В конце я использую декоратор и вызываю функцию _retry()
из RetryMiddleware
в функции декоратора.Это работает хорошо.Это не самое лучшее, лучше всего иметь промежуточное программное обеспечение для его обработки.Но это лучше, чем ничего.
from scrapy.downloadermiddlewares.retry import RetryMiddleware
def handle_exceptions(function):
def parse_wrapper(spider, response):
try:
for result in function(spider, response):
yield result
except IndexError as e:
logging.log(logging.ERROR, "Debug HTML parsing error: %s" % (unicode(response.body, 'utf-8')))
RM = RetryMiddleware(spider.settings)
yield RM._retry(response.request, e, spider)
return parse_wrapper
Тогда я использую декоратор так:
@handle_exceptions
def parse(self, response):