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 相关文章推荐
python3简单实现微信爬虫
Apr 09 Python
给Python入门者的一些编程建议
Jun 15 Python
python基础知识小结之集合
Nov 25 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
python爬虫 正则表达式解析
Sep 28 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
将python安装信息加入注册表的示例
Nov 20 Python
Django缓存Cache使用详解
Nov 30 Python
Pytorch可视化的几种实现方法
Jun 10 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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
zend framework重定向方法小结
2016/05/28 PHP
详解php用static方法的原因
2018/09/12 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
删除节点的jquery代码
2014/01/13 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
详解RequireJS按需加载样式文件
2017/04/12 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
python 实现任务管理清单案例
2020/04/25 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
python 数据类型强制转换的总结
2021/01/25 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
金融学专业大学生职业生涯规划
2014/03/07 职场文书
借款协议书范本
2014/04/22 职场文书
跳蚤市场口号
2014/06/13 职场文书
工程承包协议书范本
2014/09/29 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
施工安全责任协议书
2016/03/23 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS