Код ответа HTTP для каждого URL-адреса при очистке через Scrapy

Количество URL-адресов, которые очищаются и получают статус ответа 200, неодинаково. Кроме того, я хочу получить URL-адреса с соответствующими ответами. Я очищаю 70 000 URL-адресов с помощью Scrapy, наряду с этим я хочу получить статус ответа HTTP для каждого URL-адреса с помощью Scrapy, чтобы после получения содержимого для определенного URL-адреса мы также получили код ответа для этого URL-адрес:

URL, СОДЕРЖАНИЕ, КОД ОТВЕТА

Как получить коды ответов для соответствующих URL-адресов?введите здесь описание изображения


person Abhery Guha    schedule 03.09.2018    source источник
comment
Каков ваш конкретный вопрос? И где мы можем увидеть код, о котором вы пишете?   -  person Klaus D.    schedule 03.09.2018
comment
Свойство «статус» вашего экземпляра класса Response должно быть тем, что вам нужно. Дополнительные сведения см. на странице tutorialspoint.com/scrapy/scrapy_requests_and_responses.htm. Также см. ответы на этот вопрос: stackoverflow.com/questions/10982417/   -  person BoboDarph    schedule 03.09.2018
comment
Возможный дубликат https://stackoverflow.com/questions/10982417/capturing-http-status-codes-with-scrapy-spider   -  person gangabass    schedule 03.09.2018


Ответы (1)


Проблема в том, что по умолчанию Scrapy не вызывает ваши обратные вызовы, если пауку возвращается код ответа об ошибке. Чтобы убедиться, что ваши обратные вызовы вызываются даже для кодов ответа, таких как 404, 500 и т. д., вы должны передать эти два ключа в аргументе запроса meta:

  • handle_httpstatus_all: когда True, scrapy не будет рассматривать неверный код ответа как ошибку и будет вызывать ваш обратный вызов для обработки такого ответа.

  • dont_retry: когда True , scrapy не будет повторять запрос при получении повторяемого ответа.

Ваш паук может быть чем-то вроде этого:

class YourSpider(scrapy.Spider):
    name = 'yourspider'
    your_list_of_urls = [
        ...
    ]

    def start_requests(self):
        for url in self.your_list_of_urls:
            yield scrapy.Request(
                url,
                callback=self.parse_info,
                meta={
                    'handle_httpstatus_all': True,
                    'dont_retry': True,
                },
            )

    def parse_info(self, response):
        yield {
            'url': response.url,
            'content': response.text,
            'status': response.status,
        }
person Valdir Stumm Junior    schedule 03.09.2018
comment
Есть ли способ, где мы можем увидеть, какой URL-адрес получил какой код ответа? - person Abhery Guha; 05.09.2018
comment
запустите scrapy crawl yourspider -o items.json и проверьте файл items.json после его завершения. - person Valdir Stumm Junior; 05.09.2018