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实现一个简单的MySQL类
Jan 07 Python
Python代码实现KNN算法
Dec 20 Python
python实现日常记账本小程序
Mar 10 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
python sorted函数原理解析及练习
Feb 10 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 Python
python实现Thrift服务端的方法
Apr 20 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
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
微信小程序左滑删除效果的实现代码
2017/02/20 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
python中的五种异常处理机制介绍
2014/09/02 Python
Python多继承原理与用法示例
2018/08/23 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
通过实例解析Python return运行原理
2020/03/04 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
python interpolate插值实例
2020/07/06 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
天游软件面试
2013/11/23 面试题
实习生自我鉴定范文
2013/12/05 职场文书
护士实习生自我鉴定范文
2013/12/10 职场文书
酒店出纳岗位职责
2013/12/29 职场文书
小学假期安全广播稿
2014/09/28 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
企业百日安全活动总结
2015/05/07 职场文书
员工规章制度范本
2015/08/07 职场文书
《火烧云》教学反思
2016/02/23 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL