python - Scrapy 将请求头大写

标签 python scrapy

我按照以下方式设置标题

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/

相关文章:

python - python 3 中 str.translate 的替代品是什么?

python - 更改 Python 循环中的步骤

python - 选择器response.xpath和response.css之间的输出差异是什么?

python - Scrapy 和 Xpath 到 Google 图片上的图片链接

python - Django 与 Scrapy 的关系如何保存项目?

javascript - 在python中,如何让scrapy返回隐藏元素的内容?

python - lambda排序列表奇怪的行为

python - 通过 Flask 的 before_request() 强制使用 HTTPS

python - 将十进制时间(HH.HHH)转换为HH :MM:SS in Python

python - 如何使用 Python 快速抓取多个 HTML 文档?