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

关于 python request 的 response 返回 b‘\xa3\xff\xff\x11E .....‘ 类型的数据的解决方案
最近写开发一个爬虫, 程序在本地好好的,返回的是正常的 html, 但是到了生产环境,不知道为什么返回的是一堆乱码 长这样: 查了好几天都没有进展, 对其进行各种转码均无效 今天终于找到解决办法了ÿ…...

后端高频面试题分享-用Java判断一个列表是否是另一个列表的顺序子集
问题描述 编写一个函数,该函数接受两个列表作为参数,判断第一个列表是否是第二个列表的顺序子集,返回True或False。 要求 判断一个列表是否是另一个列表的顺序子集,即第一个列表的所有元素在第二个列表需要顺序出现。列表中的元…...

【数据初步变现】论自助BI在数字化转型中如何赋能业务
引言:数字化转型要求企业更加依赖数据来指导业务决策。自助BI作为数据分析的重要工具,能够迅速、准确地从海量数据中提取有价值的信息,为企业的战略规划和业务执行提供有力支持。在数字化时代,企业需要快速响应市场变化并优化业务…...
Python 学习 第二册 第14章 网络编程
----用教授的方式学习 目录 14.1 几个网络模块 14.1.1 模块 socket 14.1.2 模块 urllib 和 urllib2 14.1.3 其他模块 14.2 SocketServer 及相关的类 14.3.1 使用 SocketServer 实现分叉和线程化 14.3.2 使用 select 和 poll 实现异步 I/O 14.4 Twisted 14.4.1 下载…...

微信 小程序应用,页面,组件的生命周期
组件生命周期 组件的生命周期:指的是组件自身的一些钩子函数,这些函数在特定的时间节点时被自动触发 组件的生命周期函数需要在 lifetimes 字段内进行声明 最重要的生命周期是 created attached detached 包含一个组件生命周期流程的最主要时间点 定…...
代码随想录算法训练营Day41|背包问题、分割等和子集
背包问题 二维 46. 携带研究材料(第六期模拟笔试) (kamacoder.com) dp数组有两维,横轴表示背包重量j(0-j),纵轴表示不同物品(0-i),dp[i][j]即表示从下标为[0-i]的物品…...
oracle SCHEDULER
从Oracle 10g开始,推荐使用DBMS_SCHEDULER包,因为它提供了更强大的功能和灵活性,包括更复杂的调度规则、依赖管理和事件驱动等 1. 用法 DBMS_SCHEDULER.CREATE_JOB (job_name IN VARCHAR2,job_type IN VARCHAR2,job_action IN VARCHAR2,…...
实现虚拟机的难点
一、背景 目前的虚拟机有很多,例如VMWare、VitrualBox、QEMU、JVM、Python虚拟机等等。 二、虚拟机的作用 在一台已有的计算机中,忽略实际操作系统种类和硬件的型号,用一些接口库来搭建一台用户想要的,虚拟的程序运行环境。 例如…...

JAVA-线程
先上图,有点长,比较碎,有xmind文件......,详细内容均在图片里介绍了,提供了PDF文件 1.线程简介 进程是操作系统中正在执行的不同的应用程序,例如:我们可以同时打开Word和记事本 线程是一个应用…...

代码随想录——电话号码的字母组合(Leetcode17)
题目链接 回溯 class Solution {List<String> res new ArrayList<String>();StringBuilder str new StringBuilder();HashMap<String, String> Sites new HashMap<String, String>();public List<String> letterCombinations(String digit…...

多款可观测产品全面升级丨阿里云云原生 5 月产品月报
云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 阿里云云原生产品负责人李国强:推进可…...

python实践笔记(三): 异常处理和文件操作
1. 写在前面 最近在重构之前的后端代码,借着这个机会又重新补充了关于python的一些知识, 学习到了一些高效编写代码的方法和心得,比如构建大项目来讲,要明确捕捉异常机制的重要性, 学会使用try...except..finally&…...

Excel VLOOKUP 使用记录
Excel VLOOKUP 使用记录 VLOOKUP简单使用 VLOOKUP(lookup_value,table_array,col_index_num,[range-lookup]) 下面是excel对VLOOKUP 的解释 lookup_value(查找值):要匹配查找的值 table_array(数据表)࿱…...

Spring Cloud Stream 消息驱动基础入门与实践总结
Spring Cloud Stream是用于构建与共享消息传递系统连接的高度可伸缩的事件驱动微服务框架,该框架提供了一个灵活的编程模型,它建立在已经建立和熟悉的Spring熟语和最佳实践上,包括支持持久化的发布/订阅、消费组以及消息分区这三个核心概念。…...
你好rust
第一次安装rust,记录一下笔记。 几年前就听说过rust,自己一直是个c爱好者,所以比较抵触rust,早年还有什么rust向上突破群。一直比较抵触,直到这几年rust已经渐渐深入到linux内核、云原生可观测以及zend社区当中&#x…...

STM32 printf 重定向到CAN
最近在调试一款电机驱动板 使用的是CAN总线而且板子上只有一个CAN 想移植Easylogger到上面试试easylogger的效果,先实现pritnf的重定向功能来打印输出 只需要添加以下代码即可实现 代码 #include <stdarg.h> uint8_t FDCAN_UserTxBuffer[512]; void FDCAN_p…...

jmeter性能优化之mysql监控sql慢查询语句分析
接上次博客:基础配置 多用户登录并退出jmx文件:百度网盘 提取码:0000 一、练习jmeter脚本检测mysql慢查询 随意找一个脚本(多用户登录并退出),并发数设置300、500后分别查看mysql监控平台 启动后查看,主要查看mysql…...

海南聚广众达电子商务咨询有限公司引领行业变革
在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度发展。海南聚广众达电子商务咨询有限公司,凭借其在抖音电商领域的深厚积累和不断创新,正逐步成为行业的佼佼者。这家以专注、专业、专注为核心理念的公司,不仅为客户提供全…...

Unity API学习之资源的动态加载
资源的动态加载 在实际游戏开发的更新换代中,随着开发的软件不断更新,我们在脚本中需要拖拽赋值的变量会变空,而要想重新拖拽又太花费时间,因此我们就需要用到Resources.Load<文件类型>("文件名")函数来在一开始…...
C++算法——回溯
回溯算法 实现思想 先看一个实例: //暴力枚举的算法 int n 5; for (int a 1; i < n; i) {for (int b 1; b < n; b){for (int c 1; c < n; c){for (int d 1; d < n; d){for (int e 1; e < n; e){//判断 abcde 是否互补相同if (a ! b &&a…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...