поднять IgnoreRequest не работает правильно в CustomDownloaderMiddleWare - PullRequest
0 голосов
/ 27 марта 2020

Я написал свое собственное промежуточное ПО для загрузки scrapy, чтобы просто проверить db на наличие request.url, если это так, поднять IgnoreRequestf

def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.

        # Must either:
        # - return None: continue processing this request
        # - or return a Response object
        # - or return a Request object
        # - or raise IgnoreRequest: process_exception() methods of
        #   installed downloader middleware will be called

        sql = """SELECT url FROM domain_sold WHERE url = %s;"""

        try:

            cursor = spider.db_connection.cursor()
            cursor.execute(sql, (request.url,)) 

            is_seen = cursor.fetchone()
            cursor.close()
            if is_seen:
                raise IgnoreRequest('duplicate url {}'.format(request.url))

        except (Exception, psycopg2.DatabaseError) as error:
            self.logger.error(error)

        return None

, если IgnoreRequest будет поднят, я ожидаю, что паук продолжит выполнять другой запрос, но в моем на тот случай, если паук все еще продолжит очищать этот запрос и направить его через мой пользовательский конвейер.

В настоящее время у меня есть мои настройки для dl mw, как показано ниже

'DOWNLOADER_MIDDLEWARES': {'realestate. middlewares.RealestateDownloaderMiddleware ': 99

кто-нибудь может подсказать, почему это происходит. Спасибо

1 Ответ

1 голос
/ 27 марта 2020

IgnoreRequest наследуется от базового Exception класса, который вы тут же сразу же ловите в своем except и ведете логи, поэтому он никогда не распространяется настолько, чтобы фактически игнорировать запрос ...

Изменение:

except (Exception, psycopg2.DatabaseError) as error:

Кому:

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