python3 requests中文乱码之压缩格式问题解析

 更新时间:2022年08月19日 15:40:57   作者:Jason_WangYing  
这篇文章主要介绍了python3 requests中文乱码问题之压缩格式问题,我们在爬虫时,经常会遇见中文乱码问题,之前都是编码格式的问题,很少遇见由于压缩格式造成的编码混乱问题,特记录下,需要的朋友可以参考下

我们在爬虫时,经常会遇见中文乱码问题,之前都是编码格式的问题,很少遇见由于压缩格式造成的编码混乱问题,特记录下。先看下混乱的编码样式。

b'a\xd4l\x00 G6\xb5\xaa\xdf\xeaAy\x0f\xa0\xcaoZ\x92I&\x88\x14$p\xd8N\xb8\xaau\x02\xab\xdf\xeb\xac\x89r\x112q\x91\x99\xd8t\x1b\xa1"\x0b]\xb7\xf2\xee\xde[\xe8\x8a.\xd1\xa5\xe9(ZqE\xa1q\x08\x9dV\x0f\xba\x90\x11\x16K\x10^~\xc5|7\x02\x17\xd6\xef\t\x17\xea5\xe6}\xb6\x95\xf1\x91\xf6H\xa9o+s\xd3\xadv\xa9\xff\xb3\xad\xec\

 我们先看下header

header = {
    "Content-Type":"application/json",
    "Accept": "application/json",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Agw-Js-Conv": 'str',
    "Connection": "keep-alive",
    "Cookie":"***",
    "Host": "life.douyin.com",
    "Referer": "https://life.douyin.com/p/login",
    "sec-ch-ua": '"Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
    "sec-ch-ua-platform": "Android",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Mobile Safari/537.36",
    "x-secsdk-csrf-token": "*",
}

我们注意到Content-Type是application/json,我们的数据是jason格式,这时要考虑中文转换问题,用utf-8来把中文从unicode转过来。

我们转了后发现解析出来的数据还是乱码,这是什么情况呢?我们先看下请求头和响应头关于字段的解释

请求头字段说明响应头字段
Accept告知服务器发送何种媒体类型Content-Type
Accept-Language告知服务器发送何种语言Content-Language
Accept-Charset告知服务器发送何种字符集Content-Type
Accept-Encoding告知服务器采用何种压缩方式Content-Encoding

我们再看"Accept-Encoding",这个意思就是返回的数据使用的是什么压缩格式,平常我们经常使用"gzip, deflate",这是我们发现后面还跟了个br,br是什么格式呢?

br 指的是 Brotli,是一种全新的数据格式,无损压缩,压缩比极高(比gzip高的)

这需要单独导入brotil库

安装

pip install Brotli

安装后我们使用brotli来解析数据即可,

data = brotli.decompress(res.content)

还有一种最简单的方法,我们修改请求头,高速服务器,我不支持br格式,这样服务器就不会用br来压缩数据了

"Accept-Encoding": "gzip, deflate",

补充下:BrotliDecompress failed错误问题

刚开始我用request库时发现,对返回的response数据必须要引入brotli,这样才能解压缩数据,如果不引入无法解析数据,还是会反回乱码数据

import brotli
res = requests.get(url,headers = header,verify=False)
print(res.content)
print(res.text)
 
if res.headers.get('Content-Encoding') == 'br':
    data = brotli.decompress(res.content)
    print(data.decode('utf-8'))
else:
    print(res.text)

但是在我使用httpx后,发先再使用brotli.decompress()方法,会造成报错

Traceback (most recent call last):
  File "/****", line 61, in <module>
    data = brotli.decompress(res.content)
brotli.error: BrotliDecompress failed

这时无需引入brotli库,httpx会自动引入,自动调用

import json
finish_data = []
with httpx.Client(http2=True, verify=False) as client:
    cookies = httpx.Cookies()
    res = client.get(url,headers = header)
    if res.headers.get('Content-Encoding') == 'br':
       data = res.content.decode('utf-8')
       print(data)
       
       else:
          print(res.text)

到此这篇关于python3 requests中文乱码问题之压缩格式问题的文章就介绍到这了,更多相关python3 requests中文乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用python下载scihub成文献为PDF操作

    利用python下载scihub成文献为PDF操作

    这篇文章主要介绍了利用python下载scihub成文献为PDF操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python 爬取网页图片详解流程

    Python 爬取网页图片详解流程

    没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来。今天网上冲浪看到很多美图,可是图片有点多,不想一张一张地复制粘贴,怎么办呢?办法总是有的,即便没有我们也可以创造一个办法
    2021-11-11
  • 分步骤教你用python一步步提取PPT中的图片

    分步骤教你用python一步步提取PPT中的图片

    今天要带大家实现的是PPT图片的提取。在我们学习工作中,PPT的使用还是非常频繁的,但是自己做PPT是很麻烦的,所以就需要用到别人的模板或者素材,这个时候提取PPT图片就可以减少我们很多工作。
    2021-09-09
  • 解决pycharm同一目录下无法import其他文件

    解决pycharm同一目录下无法import其他文件

    今天小编就为大家分享一篇解决pycharm同一目录下无法import其他文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 在Python中使用lambda高效操作列表的教程

    在Python中使用lambda高效操作列表的教程

    这篇文章主要介绍了在Python中使用lambda高效操作列表的教程,结合了包括map、filter、reduce、sorted等函数,需要的朋友可以参考下
    2015-04-04
  • python中利用Future对象回调别的函数示例代码

    python中利用Future对象回调别的函数示例代码

    最近在学习python,所以这篇文章主要给大家介绍了关于在python中利用Future对象回调别的函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习下吧。
    2017-09-09
  • 基于Python制作简单的IP查询工具

    基于Python制作简单的IP查询工具

    这篇文章主要为大家详细介绍了如何基于Python制作一个简单的IP查询工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 使用Python写一个小游戏

    使用Python写一个小游戏

    这篇文章主要介绍了使用Python快速写一个小游戏,本次开发的小游戏叫alien invasion,具体实现过程大家参考下本文
    2018-04-04
  • Python文件操作JSON CSV TSV Excel和Pickle文件序列化

    Python文件操作JSON CSV TSV Excel和Pickle文件序列化

    这篇文章主要为大家介绍了Python文件操作之JSON、CSV、TSV、Excel和Pickle文件序列化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python使用ddt过程中遇到的问题及解决方案【推荐】

    python使用ddt过程中遇到的问题及解决方案【推荐】

    在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题,没个问题都很奇葩,下面小编通过本文给大家分享python使用ddt过程中遇到的问题及解决方案,需要的朋友参考下吧
    2018-10-10

最新评论