Код HTTP-ответа для каждого URL при просмотре Scrapy - PullRequest
0 голосов
/ 03 сентября 2018

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

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

Как получить коды ответов для соответствующих URL-адресов? enter image description here

1 Ответ

0 голосов
/ 03 сентября 2018

Проблема в том, что по умолчанию 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,
        }
...