Как я могу повторить неудачную очистку с другим URL? - PullRequest
1 голос
/ 08 апреля 2019

У меня есть функциональный скребок, который удаляет большое количество веб-сайтов из базы данных и считывает результаты в той же базе данных.Я беру домен из базы данных и вручную добавляю https://www. в URL.Даже если этот URL-адрес неверен, подавляющее большинство сайтов могут правильно перенаправить паука, но на некоторых сайтах я получаю сообщение об ошибке DNSLookup, поскольку перенаправление на месте отсутствует, хотя сайт явно существует и доступен через браузер..

Мой вопрос: есть ли способ повторить очистку, которая вызывает ошибку DNSLookup, но с другим URL?В настоящее время я обрабатываю свои ошибки в ошибке, когда я вставляю необходимую информацию в базу данных в зависимости от того, какую ошибку я получаю.Есть ли способ запросить новую очистку из результатов очистки?

1 Ответ

0 голосов
/ 08 апреля 2019

Когда вы передаете Запрос некоторому URL, кроме callback, вы можете установить errback, где вы можете ловить такие случаи.В официальной документации вы можете найти довольно хороший пример его использования: http://doc.scrapy.org/en/latest/topics/request-response.html#topics-request-response-ref-errbacks

def start_requests(self):
    for u in self.start_urls:
        yield scrapy.Request(u, callback=self.parse_httpbin,
                                errback=self.errback_httpbin,
                                dont_filter=True)

def errback_httpbin(self, failure):
    # log all failures
    self.logger.error(repr(failure))

    if failure.check(DNSLookupError):
        # this is the original request
        request = failure.request
        self.logger.error('DNSLookupError on %s', request.url)

А также проверьте, возможно, RetryMiddleware будет соответствовать вашим целям.Проверьте официальные документы для scrapy здесь: https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.retry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...