Python requests爬取时request header中有冒号

今天帮别人写一个爬虫,爬豆瓣中的剧照,爬虫的部分并不难写,我通过解析拿到了最终的图片URL,当我用谷歌浏览器去分析他的请求头的时候,发现了这样的情况:
在这里插入图片描述
有两个坑吧,第一个是这个图片的格式是webp,如果直接右键存储或者直接用代码存储的话,这张图片就只能从浏览器中打开了,不过这个问题比较好解决,只需要利用PIL.Image重新导出成jpg就可以了:

    # 下载图片
    res = requests.get(url,headers = picHead);
    # 打开文件
    f = io.BytesIO(res.content);
    # 打开图片
    im = Image.open(f)
    # 加载图片
    im.load();
    # 存储图片
    im.save('./temp.jpg');

麻烦的地方在获取图片上,他的属性里面是有冒号的,当时没有多想,于是有下面的写法:

# 下载图片
def downloadPic1(url):
    
    # 读取图片所需要的请求头
    picHead = {
        ':authority': 'img9.doubanio.com',
        ':method': 'GET',
        ':path': '/view/photo/l/public/p2309770674.webp',
        ':scheme': 'https',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'cache-control': 'max-age=0',
        'if-modified-since': 'Wed, 21 Jan 2004 19:51:30 GMT',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
    }
    # 下载图片
    res = requests.get(url,headers = picHead);
    # 打开文件
    f = io.BytesIO(res.content);
    # 打开图片
    im = Image.open(f)
    # 加载图片
    im.load();
    # 存储图片
    im.save('./temp.jpg');
    #休眠一段时间防止频率过高爆炸
    time.sleep(1)

运行之后报了错:
在这里插入图片描述
我猜想可能是冒号的原因,然后把冒号去除之后再爬,倒是不会报不识别的错了,但是获得的流是空的,于是我百度找到了原因,这个东西叫做HTTP2:
HTTP2即未来
看起来很牛逼不过对我的问题没有什么帮助,其他提到这个问题的也没有解决方案,这时我突然想到,如果我用火狐浏览器试试重新发送一下请求呢,于是我复制这个url在火狐浏览器中打开,看到了如下的情况:
在这里插入图片描述
可以看到火狐浏览器中并没有那个讨厌的冒号,复制他的请求头再到代码中重新爬取,可以看到下载成功。
在这里插入图片描述
这个解决方法有点不太好,因为并没有从本质上解决这个问题,猜测可能是火狐并没有用HTTP2的方式来读取请求,但是有时候解决方案就是能用就行,如果有代码层面的解决方法也请分享一下吧。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值