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

python中——requests爬虫【中文乱码】的3种解决方法

requests是一个较为简单易用的HTTP请求库,是python中编写爬虫程序最基础常用的一个库。
而【中文乱码】问题,是最常遇到的问题,对于初学者来说,是很困恼的。
本文将详细说明,python中使用requests库编写爬虫程序时,出现【中文乱码】的原因,及常见3种解决办法。

一、【中文乱码】情况及出现原因

(一)【中文乱码】举例

首先,本文的【中文乱码】情况,指的是原网页中的中文内容在使用requests获取后,中文完全无法识别的情况,区别于\x、\u等编码情况。如下图中的例子:
在这里插入图片描述
注:requests.get()方法,返回一个response对象,其存储了服务器响应的内容。

(二)出现【中文乱码】原因

导致上图中【中文乱码】的原因:
使用requests库时,选择使用的文本响应方法不合适,且没有在代码中添加设置合适的编码,以致于使用【response.text】自动获取到的网页编码,与实际网页的编码不一致,进而产生【中文乱码】。
使用requests库时,可能已经形成了一个习惯,常用【response.text】进行文本响应,而【response.content】常用于图片、视频等。
这两者,最大的一个区别就是:
1、【response.text】会自动根据HTTP头部去推测网页的编码,解码并返回解码后的文本。
2、【response.content】不会解码,直接以二进制形式返回。
两种文本响应方法,如下表:

方法释义
response.text服务器响应的内容,会自动根据响应头部的字符编码进行解码。根据HTTP头部对响应的编码做出有根据的推测,推测文本编码。返回类型:str;常用于:响应文本
response.content字节方式的响应体,不会根据HTTP头部对响应的编码做出有根据的推测。返回类型:bytes(二进制);常用于:图片、视频

二、3种处理【中文乱码】的方法

(一)修改网页文本获取的方法

据上,已知原因是获取文本的方法不对,显然最简单、直接的方法就是:
直接将response.text换成response.content
在这里插入图片描述

(二)手动指定网页编码、再提取文本

据上,已知使用【response.text】时,会解码返回,但解码又与原网页编码不一致,而导致【中文乱码】。
鉴于response也提供了【response.encoding】,来指定返回后的网页编码。
所以解决方法可以是:
手动指定网页编码,使之得到正常的文本
该方法的较第一种,相对麻烦一点:
首先,需要确认原网页的实际编码,然后根据网页实际编码做出修改。
具体步骤如下:
1、查看网页编码
查看网页编码,有以下两种方式:
(1)直接打开网页源码(html)【Ctr+U】,查看编码:【charset】的值。
在这里插入图片描述
(2)使用response的encoding、apparent_encoding,得到网页编码。
encoding、apparent_encoding两者最大的区别:
encoding是从header中去提取,而apparent_encoding是从网页源码去解析,apparent_encoding得到的结果更准确。
详细如下表:

属性释义
response.encoding从网页响应的header中,提取charset字段中的编码。若header中没有charset字段,则默认为ISO-8859-1编码模式,ISO-8859-1编码无法解析中文,这也是中文乱码的原因。
response.apparent_encoding从网页的内容中(html源码)中分析网页编码的方式。所以apparent_encoding比encoding更加准确,获取到的才是原网页的实际编码。

以(1)中网址为例,网页的真实编码为【GB2312】。
使用encoding、apparent_encoding两种方法,所得的结果是不一致的,apparent_encoding才是原网页实际编码。如下图:
在这里插入图片描述
2、手动指定文本编码
根据上述方法,获得原网页的实际编码后,手动在代码中指定文本编码格式,即可解决【中文乱码】问题。
写法有2种,可任选其一,如下图:
在这里插入图片描述

(三)在文本获取后对【中文乱码】进行转码

除了以上2种解决办法外,还可以使用pyhton自带的编码方法,把【中文乱码】的内容再次进行转码,转换为成网页实际的编码格式即可。
转码方式:encode(‘iso-8859-1’).decode(‘编码格式’)
如上面例子中,网页编码实际为“gb2312”,代码可修改为:
在这里插入图片描述
以上就python使用requests库编写爬虫时,出现【中文乱码】的原因,及常见的三种处理方法,可供参考。

-end

相关文章:

python中——requests爬虫【中文乱码】的3种解决方法

requests是一个较为简单易用的HTTP请求库,是python中编写爬虫程序最基础常用的一个库。 而【中文乱码】问题,是最常遇到的问题,对于初学者来说,是很困恼的。 本文将详细说明,python中使用requests库编写爬虫程序时&…...

E. Nastya and Potions(DFS+记忆化搜索)

炼金术士纳斯蒂亚喜欢混合药剂。一共有n种药剂,ci硬币可以买到一种 i 型药剂。 任何一种药剂都只能通过一种方式获得,即混合其他几种药剂。混合过程中使用的药剂将被消耗掉。此外,任何药剂都不能通过一个或多个混合过程从自身获得。 作为一名…...

什么是tcp rst以及什么时候产生?

rst包是仅在header control bits设置rst的空payload包,用于强制关闭tcp连接。常在以下场景发送 远程主机没有监听该端口 远程主机强迫关闭了一个现有连接。比如服务端进程崩溃后重启会向之前连接发送rst 相比于四次挥手的fin,rst是在异常情况下的无条…...

Visual Studio Code配置免密远程开发环境

VSCode安装插件 要是想连接远程服务器,先在本地安装下面的插件(红色圈起来的需要装) 连接远程服务器 配置服务器信息 保存然后再连接,输入密码,如果能连接上说明是没问题的,下面开始免密登录 免密配置 客…...

flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS

当你在Flutter应用中尝试打开一个非安全连接的网页(例如HTTP连接而不是HTTPS连接)时,可能会遇到"ERR_CLEARTEXT_NOT_PERMITTED"错误。这是因为默认情况下,Android 9及更高版本禁止应用程序通过非安全的明文HTTP连接进行…...

ARP协议(地址解析协议)

文章目录 ARP协议(地址解析协议)MAC地址ARP协议ARP具体实现同一链路不同链路 ARP 缓存缓存查询 APR请求/响应报文 ARP协议(地址解析协议) MAC地址 MAC 地址的全称是 Media Access Control Address,即媒体访问控制地址…...

【贪心算法】334. 递增的三元子序列

334. 递增的三元子序列 解题思路 找到的递增序列 不一定是连续的固定第一个数first 然后开始向后找第二个数second要求second 大于 first 找到之后 向后找第三个数third 找到 返回true如果third < first 那么更新first third 重新找如果只是third > first 更新second …...

react实现路由跳转动画

下载插件 npm i react-transition-group 配置路由 import { createBrowserRouter as ReactRouter,Navigate } from "react-router-dom";import App from ../App.js import Login from "../view/login.js"; import Home from "../home.js"; co…...

(二)RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】 文章目录 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】**安装Erlang**安装RabbitMQ账户管理管控台Docker安装RabbitM…...

springboot mybatis-plus 多数据源配置(HikariCP)

1.导入依赖jar <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgres…...

跃焱邵隼网站demo

xdm 网站的代码开源了。 今年迷上摄影和剪辑了&#xff0c;所以很少投入到网站的维护。 然后经过群友的一些反馈&#xff0c;所以决定 将网站上demo开源放出来了。 后面有机会再出一些好玩的东西。 哦 对了 3d 编辑器我已经融入地图了 年底搞一些好玩的东西出来。 可以关注…...

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller&#xff08;控制器存储&#xff09; 1.2.2 Service&#xff08;服务存储&#xff09; 1.2.3 Repository&#xff08;仓库存储&#xff09; 1.2.4 Component&#xff08;组件存储&…...

TypeScript基础篇 - 泛型

目录 泛型的概念 接口是对方面的描述&#xff08;Aspect&#xff09;&#xff0c;继承其中几个方法。重定义方法 泛型是对共性的提取 泛型&#xff08;Generics&#xff09; 泛型的例子 泛型类 推荐写法 泛型约束 keyof操作符 泛型的特化&#xff08;实例化&#xff…...

C++ 常量

常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&#xff0c;可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量&#xff0c;只不过常量的值在定义后不能进行修改。 整数常量…...

智安网络|实现数据安全:探索数据动态脱敏的落地策略

在当今数字化时代&#xff0c;数据安全成为企业和组织管理中的头等大事。然而&#xff0c;数据共享和数据大规模处理的需求也日益增长&#xff0c;这就需要在数据传输和存储过程中采取措施来保护用户的隐私。数据动态脱敏技术应运而生&#xff0c;为解决数据隐私和保护的问题提…...

全加器(多位)的实现

一&#xff0c;半加器 定义 半加器&#xff08;Half Adder&#xff09;是一种用于执行二进制数相加的简单逻辑电路。它可以将两个输入位的和&#xff08;Sum&#xff09;和进位&#xff08;Carry&#xff09;计算出来。 半加器有两个输入&#xff1a;A 和 B&#xff0c;分别代表…...

Clion开发stm32之微妙延迟(采用nop指令实现)

前言 需要借助逻辑分析仪动态调整参数此次测试的开发芯片为stm32f103vet6 延迟函数 声明 #define NOP_US_DELAY_MUL_CNT 5 /*nop 微妙延迟需要扩大的倍数(根据实际动态修改)*/ void bsp_us_delay_nop(uint32_t us);void bsp_ms_delay_nop(uint32_t ms);定义 void bsp_us_dela…...

Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)

目录 1.获取参数 1.1获取单个参数 1.2获取多个参数 传参注意事项&#xff1a; 2.获取对象 3.后端参数重命名RequestParam 4.获取JSON对象RequestBody 5.从 URL 地址中获取参数 PathVariable 6.上传文件 RequestPart 7.获取Cookie/Session/Header 7.1 获取 Request 和…...

Langchain 的 Conversation summary memory

Langchain 的 Conversation summary memory 现在让我们看一下使用稍微复杂的内存类型 - ConversationSummaryMemory 。这种类型的记忆会随着时间的推移创建对话的摘要。这对于随着时间的推移压缩对话中的信息非常有用。对话摘要内存对发生的对话进行总结&#xff0c;并将当前摘…...

Safari 查看 http 请求

文章目录 1、开启 Safari 开发菜单2、显示 JavaScript 控制台 1、开启 Safari 开发菜单 Safari 设置中&#xff0c;打开开发菜单选项 *** 选择完成后&#xff0c;Safari 的目录栏就会出现一个 开发 功能。 2、显示 JavaScript 控制台 开启页面后&#xff0c;在开发中选中 显…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...

MySQL用户远程访问权限设置

mysql相关指令 一. MySQL给用户添加远程访问权限1. 创建或者修改用户权限方法一&#xff1a;创建用户并授予远程访问权限方法二&#xff1a;修改现有用户的访问限制方法三&#xff1a;授予特定数据库的特定权限 2. 修改 MySQL 配置文件3. 安全最佳实践4. 测试远程连接5. 撤销权…...