Как вернуть ошибку 404 в Scrapy, если я не хочу обрабатывать все ошибки 404? - PullRequest
0 голосов
/ 27 мая 2020

Я хочу обрабатывать 404 ошибки в Scrapy, но не все 404 ошибки. Как мне выдать ошибку 404, если я не хочу ее обрабатывать?

1 Ответ

0 голосов
/ 27 мая 2020

Хммм, оказывается, я могу обработать ответ 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

...