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

news2024/11/23 21:29:52

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

前端vue部署到nginx并且配置https安全证书全流程

说明一下: 本人原本使用的是docker安装nginx通过挂载实现部署,但是出现了很多bug(例如部署安全证书后还是无法访问),所以困扰了很久,最后改为本地安装nginx,最终在不懈的努力下终于按照好了&…

H5页面 卡片 分享朋友圈和好友

项目背景: 前后端分离: 后端: C# 开发 前端: 就是微信中打开的 H5页面 纯 H5 业务流程: 因为在 h5 中实现 卡片分享 的一个字段, 需要后端 访问 腾讯API 生成,所以整个分享结构和流程就比较长&#xff…

Stable diffusion 和 Midjourney 怎么选?

通过这段时间的摸索,我将和你探讨,对普通人来说,Stable diffusion 和 Midjourney 怎么选?最重要的是,学好影视后期制作对 AI 绘画创作有哪些帮助?反过来,AI 绘画对影视后期又有哪些帮助&#xf…

Python案例变量实践

编程:非常需要实践,不要光看,一定要动动手 什么是程序? 数据结构算法 数据结构:存储和使用数据的方式 算法:解决问题的步骤 解决一个问题的时候,分析问题,设计算法,编…

网约车服务端线上流量巡检与测试验收技术

摘要 滴滴网约车致力于让出行更美好,平台为司乘提供良好体验的同时承载了广大群众的出行服务,致使我们对服务可用性的要求较高。更快地发现系统bug,可以让更少的司乘用户受影响。发现bug的能力更精细,可以让一些不易被用户感知但…

2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)

文章目录 1. 平移 (Translation)2. 缩放 (Scaling)3. 旋转 (Rotation)4. 错切 (Shearing)5. 镜像 (Reflection) 1. 平移 (Translation&#xff09…

Nautilus Chain:主权模块化区块链的早期实践

“Nautilus Chain 是目前行业内首个以模块化的方式构建的主权 Layer3 区块链系统,其也是 Celestia 模块化 Layer0 体系下最早的印证者,现在 Nautilus Chain 主网正式上线,揭示着模块化区块链正在从早期的理论阶段走向实践。” Celestia &…

Godot 4 源码分析 - 获取属性信息

在管道通信基础上,可进行宿主程序与Godot的双向通信。 先拿属性信息试试手。 DrGraph端 static UnicodeString command "Book.position"; if (InputQuery("输入窗口", "请输入待获取的属性信息", command)) {TDrStream_Get drGet…

5.10 Bootstrap 按钮(Button)插件

文章目录 Bootstrap 按钮(Button)插件加载状态单个切换复选框(Checkbox)单选按钮(Radio)用法选项方法 Bootstrap 按钮(Button)插件 按钮(Button)在 Bootstrap…

forEach遍历访问set造成的无限循环问题

抛出问题 先给出一段代码,我们创建了一个集合set,它里面有一个元素数字1和2,接着我们调用forEach方法来遍历该集合。在遍历函数中,首先调用delete方法删除数字1,再执行了某些业务操作后紧接着调用add方法将数字1加回&…

Linux系统root用户切换及密码修改

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑…

面试—Redis相关

文章目录 一、概述二、缓存1、缓存穿透2、缓存击穿3、缓存雪崩4、双写一致性5、持久化6、数据过期策略7、数据淘汰策略 三、分布式锁四、其它面试题1、主从复制2、哨兵3、分片集群结构4、I/O多路复用 一、概述 使用场景: Redis的数据持久化策略有哪些什么是缓存穿透…

[PyTorch][chapter 44][RNN]

简介 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网…

leetcode 面试题 判定是否互为字符重排

⭐️ 题目描述 🌟 leetcode链接:判定是否互为字符重排 思路: 两个字符串的每个字母和数量都相等。那么 s2 一定可以排成 s1 字符串。 代码: bool CheckPermutation(char* s1, char* s2){char hash1[26] {0};char hash2[26] {…

Python深度学习“四大名著”之一【赠书活动|第二期《Python机器学习:基于PyTorch和Scikit-Learn》】

近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。自从AlexNet模型在2012年ImageNet大赛被提出以来,机器学习和深度学习迅猛发展,取…

不知道零基础小白拥有一个黑客梦有没有机会能够实现

01.简单了解一下网络安全 说白了,网络安全就是指网络系统中的数据受到保护不被破坏。而我们从事网络信息安全工作的安全工程师,主要工作当然是设计程序来维护网络安全了。 网络安全工程师是一个统称,还包含很多职位,像安全产品工…

【代码随想录day19】从前序与中序遍历序列构造二叉树

题目 思路 使用递归建树,流程如下: 取出后序节点创建新树的节点 找到新树的节点在中序中的索引 分割中序序列 分割后序序列 继续递归建立整颗新树 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftN…

spring-cloud-alibaba——nacos-server搭建

前言:组件版本关系,官方:组件版本关系 1,nacos-server搭建(windows环境),下载地址nacos 选择对应的版本,这里以目前最新版2.2.3为例子,下载后解压 单机模式 修改\nacos-server-2.2.3\nacos\bin\startup.c…