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去除所有html标签的方法
May 05 Python
python对json的相关操作实例详解
Jan 04 Python
python笔记:mysql、redis操作方法
Jun 28 Python
python处理Excel xlrd的简单使用
Sep 12 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
python安装twisted的问题解析
Aug 21 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
pd.DataFrame中的几种索引变换的实现
Jun 16 Python
python热力图实现的完整实例
Jun 25 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
python matplotlib画图实例代码分享
2017/12/27 Python
python如何生成网页验证码
2018/07/28 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python制作图片缩略图
2019/04/30 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
python 通过exifread读取照片信息
2020/12/24 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
数据库专业英语
2012/11/30 面试题
经典禁毒标语
2014/06/16 职场文书
2016公司新年问候语
2015/11/11 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL