Python响应对象text属性乱码解决方案


Posted in Python onMarch 31, 2020

在获得网页响应对象res后,使用res.text属性可以获得网页源代码,但可能出现乱码!因为requests库会使用自动猜测的解码方式将抓取的网页源码进行解码,然后存储到res对象的text属性中;

但有的网站的编码格式和requests库默认的解码格式()不一样(比如gbk gb2312是gbk的子集),这时候就要自己手动进行解码,先获得content属性,返回的是bytes类型的字符串,再进行解码decode(“网页的编码

格式”)

这时候可能出现新的问题

'gbk' codec can't decode byte 0xd0 in position 15264: illegal multibyte sequence

这是因为遇到了非法字符

比如网页中有这种字符

Python响应对象text属性乱码解决方案

全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些 字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。

只要字符串中出现了一个非法字符,整篇文章就都无法转码。

对于这种字符,根本不需要,不重要!

解决方法:在解码时候指定errors参数,

decode()的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数是strict,代表遇到非法字符时抛出异常;

  • 如果设置为ignore,则会忽略非法字符;
  • 如果设置为replace,则会用?取代非法字符;
  • 如果设置为xmlcharrefreplace,则使用XML的字符引用

#requests库默认会使用自己猜测的解码方式将抓取下来的网页进行解码,然后存储到text属性上去;
#但在该网站中,编码方式和默认的解码方式不一样,就会产生乱码,所以要手动进行解码,先获得content再decode()解码
#右键查看网页源代码,发现是gb2312编码,gb2312就是gbk的子集,所以用decode("gbk")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python关键字and和or用法实例
May 28 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
你应该知道的python列表去重方法
Jan 17 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Python全栈之列表数据类型详解
Oct 01 Python
Python模块汇总(常用第三方库)
Oct 07 Python
在ipython notebook中使用argparse方式
Apr 20 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
详解python对象之间的交互
Sep 29 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 #Python
Python super()方法原理详解
Mar 31 #Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 #Python
django rest framework serializer返回时间自动格式化方法
Mar 31 #Python
Python @property及getter setter原理详解
Mar 31 #Python
关于Django Models CharField 参数说明
Mar 31 #Python
Django Serializer HiddenField隐藏字段实例
Mar 31 #Python
You might like
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
人事助理岗位职责
2013/11/18 职场文书
一年级班主任寄语
2014/01/19 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
干部培训简讯
2015/07/20 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
详解Vue的options
2021/05/15 Vue.js
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
Python自动化实战之接口请求的实现
2022/05/30 Python