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实现的阳历转阴历(农历)算法
Apr 25 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
Python发送以整个文件夹的内容为附件的邮件的教程
May 06 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
python遍历目录的方法小结
Apr 28 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
浅谈Python的list中的选取范围
Nov 12 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
python global关键字的用法详解
Sep 05 Python
python实现电子词典
Mar 03 Python
浅析Python 条件控制语句
Jul 15 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
js代码实现微博导航栏
2015/07/30 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
PHP序列化操作方法分析
2016/09/28 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
详解Python3 pandas.merge用法
2019/09/05 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
python怎么判断素数
2020/07/01 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
面向对象设计的原则是什么
2013/02/13 面试题
公司端午节活动方案
2014/02/04 职场文书
高中家长意见怎么写
2015/06/03 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python