Python 在不下载正文的情况下检查scrapy中的响应标头

Python 在不下载正文的情况下检查scrapy中的响应标头,python,scrapy,Python,Scrapy,有些pdf URL不以“.pdf”结尾,因此,我们只能在检查响应标题后才能找到。我希望避免下载此类PDF。在Scrapy中,在响应完全下载后检查标题很容易。如何下载和检查响应头,并在以后下载正文?使用HTTP请求方法HEAD获取响应头。然后检查内容类型,在此基础上,您可以提出相同的请求,这次使用GET方法。请参见以下示例: # -*- coding: utf-8 -*- from __future__ import print_function, unicode_literals import

有些pdf URL不以“.pdf”结尾,因此,我们只能在检查响应标题后才能找到。我希望避免下载此类PDF。在Scrapy中,在响应完全下载后检查标题很容易。如何下载和检查响应头,并在以后下载正文?

使用HTTP请求方法
HEAD
获取响应头。然后检查
内容类型
,在此基础上,您可以提出相同的请求,这次使用
GET
方法。请参见以下示例:

# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
import scrapy

class DummySpider(scrapy.Spider):
    name = 'dummy'

    def start_requests(self):
        yield scrapy.Request('https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
                             callback=self.parse_headers, method='HEAD')

    def parse_headers(self, response):
        if response.headers['Content-Type'].startswith('application/pdf'):
            yield response.request.replace(callback=self.parse, method='GET')

    def parse(self, response):
        print(len(response.body))

谢谢,这很有效。如果您知道,是为“GET”部件建立了新连接,还是为“HEAD”部件重用了连接?我担心做两次TLS握手。这超出了我的知识范围,对不起