我按照以下方式设置标题
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'cache-control': 'no-cache',
...
}
并像这样调用请求:
yield scrapy.Request(url='https:/myurl.com/', callback=self.parse,
headers=headers, cookies=cookies, meta={'proxy': 'http://localhost:8888'})
它使得 scrapy 将所有这些 header 大写,看起来像这样(我使用 Charles 代理进行调试):
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Cache-Control: no-cache
这对于我的情况来说无法正常工作。
如果我使用curl并将标题设置为小写
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
cache-control: no-cache
一切都像魅力一样。
有什么方法可以在 Scrapy 中禁用这种大写行为吗? 感谢您的帮助!
最佳答案
这不能用 Scrapy 开箱即用地完成。
原因:它在设计上以不区分大小写的方式管理 header (请参阅: https://github.com/scrapy/scrapy/blob/master/scrapy/http/headers.py )。我猜他们这样做是为了避免重复 header 的麻烦。
因此,很可能您必须进行 fork 并推出自己的 header 处理实现,或者至少进行一些猴子修补。
但我想知道这是否真的是您所需要的。我知道有些网站确实会请求 header 指纹识别来检测机器人,但 scrapy 生成的大写 header 看起来比您想要为请求生成的全小写 header 更非机器人。
关于python - Scrapy 将请求头大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43455417/