Я написал свое собственное промежуточное ПО для загрузки 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
кто-нибудь может подсказать, почему это происходит. Спасибо