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中实现的RC4算法
Feb 14 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
python绘制简单彩虹图
Nov 19 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python API自动化框架总结
Nov 12 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
python中的3种定义类方法
Nov 27 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
火车头采集器3.0采集图文教程
2007/03/17 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
在Python中使用第三方模块的教程
2015/04/27 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
浅谈Python爬虫基本套路
2019/03/25 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python txt文件如何转换成字典
2020/11/03 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
《蒲公英》教学反思
2014/02/28 职场文书
初三学生个人自我评定
2014/04/06 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
表扬信范文
2015/05/04 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
python异常中else的实例用法
2021/06/15 Python
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python