首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scrapy将请求头大写

Scrapy将请求头大写
EN

Stack Overflow用户
提问于 2017-04-18 00:30:11
回答 3查看 918关注 0票数 2

我按照下面的方式设置头文件

代码语言:javascript
运行
复制
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'cache-control': 'no-cache',
...
}

以及像这样的调用请求:

代码语言:javascript
运行
复制
yield scrapy.Request(url='https:/myurl.com/', callback=self.parse, 
headers=headers, cookies=cookies, meta={'proxy': 'http://localhost:8888'})

它使得scrapy将所有这些头文件大写,看起来是这样的(我使用Charles proxy进行调试):

代码语言:javascript
运行
复制
Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Cache-Control: no-cache

对于我的情况,这是不正确的。

如果我使用curl并将标题设置为小写

代码语言:javascript
运行
复制
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
cache-control: no-cache

每件事都像符咒一样有效。

有没有办法在Scrapy中禁用这种大写行为?谢谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2017-04-18 04:47:52

这不能用Scrapy开箱即用。

原因:它在设计上以不区分大小写的方式管理头文件(参见:https://github.com/scrapy/scrapy/blob/master/scrapy/http/headers.py)。我猜他们这么做是为了避免重复报头带来的麻烦。

因此,最有可能的是,你将不得不做一个分支,并滚动你自己的头处理实现,或者至少做一些简单的修补。

但我想知道这是否真的是你所需要的。我知道有些网站确实会请求报头指纹识别来检测机器人,但scrapy生成的大写报头看起来比你想要为你的请求生成的全小写报头更像是非机器人报头。

票数 1
EN

Stack Overflow用户

发布于 2019-09-04 21:00:29

这是我的变通方法。在爬虫文件中,首先创建一个从头文件派生的类。

代码语言:javascript
运行
复制
from copy import deepcopy
from scrapy.http import Headers
class Headers2(Headers):

    def __init__(self, seq=None, encoding='utf-8'):

        Headers.__init__(self, seq, encoding)

    def normkey(self, key):
        """Method to normalize dictionary key access"""
        return key.lower()

然后在你的爬虫代码中

代码语言:javascript
运行
复制
req = scrapy.Request(
                url=url,
                headers=header,
                callback=self.get_parcel_url
            )

h = Header2(copy.deepcopy(req.headers))
req.headers = h
票数 1
EN

Stack Overflow用户

发布于 2020-12-09 10:42:06

由于这个原因,我遇到了两个网站的拦截问题。以下是我的变通方法,这两次都有效:

代码语言:javascript
运行
复制
headers={
    "":"accept-encoding: gzip, deflate, br",
    "":"accept-language: en-US,en;q=0.9,hi;q=0.8,pt;q=0.7",
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43455417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档