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基础教程之自定义函数介绍
Aug 29 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
Python常用特殊方法实例总结
Mar 22 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
python实现简易淘宝购物
Nov 22 Python
Python partial函数原理及用法解析
Dec 11 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
python2和python3哪个使用率高
Jun 23 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
python数据分析之用sklearn预测糖尿病
Apr 22 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判断ip黑名单程序代码实例
2014/02/24 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
微信小程序 密码输入(源码下载)
2017/06/27 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
python利用lxml读写xml格式的文件
2017/08/10 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
详解python3中tkinter知识点
2018/06/21 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python日期相关操作实例小结
2019/06/24 Python
django 类视图的使用方法详解
2019/07/24 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
初中军训感想
2015/08/07 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL