当前位置: 首页 > news >正文

关于 python request 的 response 返回 b‘\xa3\xff\xff\x11E .....‘ 类型的数据的解决方案

最近写开发一个爬虫, 程序在本地好好的,返回的是正常的 html, 但是到了生产环境,不知道为什么返回的是一堆乱码

长这样:

查了好几天都没有进展, 对其进行各种转码均无效

今天终于找到解决办法了,感谢这个回答:

python 3.x - Unable to read json response from requests library - Stack Overflow

原来这种数据是经 Brotli 压缩后的数据,下面是文心一言给出的解释:

关于Brotli

Brotli是一种由Google开发的开源通用数据压缩算法,旨在优化网络上的数据传输。

以下是关于Brotli的详细概述:

  1. 背景与目的
    • 现代的网页通常包含大量的HTML、CSS和JavaScript代码以及图片、视频等大型文件数据,导致网页加载速度较慢。
    • Brotli的设计目标是通过高效的压缩算法,减少网络传输的数据量,从而加快网页加载速度,提升用户体验。
  2. 技术特点
    • 压缩效率:相比传统的GZIP和DEFLATE算法,Brotli具有更高的压缩比,可以将数据压缩到更小的体积,节省带宽和存储空间。
    • 编码技术:Brotli采用了多种先进的编码技术,包括霍夫曼编码(Huffman coding)、LZ77字典匹配以及自适应二进制长度编码(Adaptive Binary Length Coding),能够针对不同的输入数据动态调整压缩策略,实现最佳的压缩效果。
    • 可配置性:Brotli的编码器库提供了12个质量级别(从0到11),允许在压缩速度和压缩率之间进行权衡。
    • 跨平台支持:Brotli库支持多种操作系统和编程语言,包括C/C++、Python、Java等,方便开发者集成到各种项目中。
  3. 应用场景
    • Web性能优化:Brotli能够显著减少网络传输的数据量,加快页面加载速度,适用于HTTP/2多路复用和WebSocket传输等场景。
    • 服务器资源节省:在存储有限的环境或带宽成本较高的情况下,Brotli可以帮助节省存储空间和带宽消耗。
    • 实时通信:在实时通信应用(如视频会议)中,数据压缩可以降低延迟,改善用户交互体验。
  4. 兼容性
    • 尽管Brotli是一种新的压缩标准,但它已经在大多数现代浏览器中得到支持,确保了广泛的兼容性。
  5. 注意事项
    • Brotli压缩只在HTTPS下生效,因为HTTP请求中的Accept-Encoding头通常不包含br(Brotli的缩写)。

综上所述,Brotli作为一种高效的压缩算法,为Web加速提供了有力的支持,是提升网络性能和用户体验的重要工具。

python Brotli 解压

在Python中,你可以使用brotli库来解压Brotli压缩的数据。这个库提供了Brotli压缩和解压的API。如果你还没有安装这个库,你可以通过pip来安装它:

pip install brotli

一旦安装完成,你就可以在Python代码中使用这个库来解压Brotli数据了。下面是一个简单的例子:

import brotli # 假设你有一个Brotli压缩的字节串 
compressed_data = b'...' # 这里应该是你的Brotli压缩数据 # 使用brotli.decompress()函数来解压数据 
decompressed_data = brotli.decompress(compressed_data) # 现在decompressed_data包含了原始数据 
print(decompressed_data)

在这个例子中,brotli.decompress()函数接收一个字节串(bytes),该字节串应该包含Brotli压缩的数据。这个函数会返回一个字节串,该字节串包含了解压后的原始数据。

解压后, 终于显示正常数据了,谢天谢地谢广坤,终于解决了

同理,可能还会有其他压缩格式, 是根据 header 的  Accept-Encoding, 用上面的解压方式不行的话, 可尝试其他 Accept-Encoding 的其他解压方式

知识库又增加了一点点

http://www.lryc.cn/news/374905.html

相关文章:

  • 后端高频面试题分享-用Java判断一个列表是否是另一个列表的顺序子集
  • 【数据初步变现】论自助BI在数字化转型中如何赋能业务
  • Python 学习 第二册 第14章 网络编程
  • 微信 小程序应用,页面,组件的生命周期
  • 代码随想录算法训练营Day41|背包问题、分割等和子集
  • oracle SCHEDULER
  • 实现虚拟机的难点
  • JAVA-线程
  • 代码随想录——电话号码的字母组合(Leetcode17)
  • 多款可观测产品全面升级丨阿里云云原生 5 月产品月报
  • python实践笔记(三): 异常处理和文件操作
  • Excel VLOOKUP 使用记录
  • Spring Cloud Stream 消息驱动基础入门与实践总结
  • 你好rust
  • STM32 printf 重定向到CAN
  • jmeter性能优化之mysql监控sql慢查询语句分析
  • 海南聚广众达电子商务咨询有限公司引领行业变革
  • Unity API学习之资源的动态加载
  • C++算法——回溯
  • java的深拷贝和浅拷贝
  • AI产品经理,应掌握哪些技术?
  • 同三维T80004EHL-W-4K30 4K HDMI编码器,支持WEBRTC协议
  • Hi3861 OpenHarmony嵌入式应用入门--点灯
  • SaaS案例分享:成功构建销售渠道的实战经验
  • 密钥管理简介
  • 2024中国应急(消防)品牌巡展成都站成功召开!
  • ansible-Role角色批量按照node_export节点,并追加信息到Prometheus文件中
  • 求最小公倍数 、小球走过路程计算 题目
  • 【Android面试八股文】你能说一说为什么IO是耗时操作?
  • 怎样增强 CLike 游戏的社交功能,促进玩家之间的互动和交流?