Хммм, оказывается, я могу обработать ответ 404 на конкретный c запрос, используя errback
.
import scrapy
from scrapy.spidermiddlewares.httperror import HttpError
class SampleSpider(scrapy.Spider):
name = 'sample'
allowed_domains = ['example.com']
start_urls = ["https://example.com"]
def parse(self, response):
if response.status in self.handle_httpstatus_list:
return Request(url="https://example.com/404url/", callback=self.parse_page, errback=self.after_404)
def parse_page(self, response):
# parse the page and extract items for success result
def after_404(self, failure):
if failure.check(HttpError) and failure.value.response.status == 404:
print ("We got 404!")
# handle the page for 404 status
else:
# Log others as error
self.logger.error(repr(failure))
Таким образом, другие запросы, которые я не хочу, чтобы обрабатывать статус 404 по-прежнему возвращать ошибки как обычно.
Я сделал это на основе https://docs.scrapy.org/en/latest/topics/request-response.html#topics -request-response-ref-errbacks