通过Scrapy抓取时每个URL的HTTP响应代码

时间:2018-09-03 13:09:15

标签: python web-scraping scrapy response http-response-codes

正在被抓取并获得200个响应状态的URL的数量不相同。另外,我想获得带有各自响应的URL。我正在使用Scrapy抓取70,000个URL,并希望通过Scrapy获取每个URL的HTTP响应状态,以便在获取特定URL的内容之后,我们还将获得该URL的响应代码:

URL,内容,响应代码

如何获取各个URL的响应代码?enter image description here

1 个答案:

答案 0 :(得分:0)

问题在于,默认情况下,如果将错误响应代码返回到蜘蛛,Scrapy不会调用您的回调。为了确保即使对响应代码(例如404500等)都调用了回调,您必须在请求meta参数中传递以下两个键:

  • handle_httpstatus_all:当True时,scrapy不会将无效的响应代码视为错误,而是会调用您的回调来处理此类响应。

  • dont_retry:当True时,抓取不会在获取可重试响应时重试该请求。

您的蜘蛛可能就是这些东西:

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,
        }