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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
用Python的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
Python的语言类型(详解)
Jun 24 Python
python实现任意位置文件分割的实例
Dec 14 Python
python导入pandas具体步骤方法
Jun 23 Python
使用Python画出小人发射爱心的代码
Nov 23 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
详解Python中的Lock和Rlock
Jan 26 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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实现的漂亮分页方法
2014/04/17 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
node.js中watch机制详解
2014/11/17 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
详解vuex的简单使用
2018/03/12 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
详解Python当中的字符串和编码
2015/04/25 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
python实现超市扫码仪计费
2018/05/30 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
Django框架表单操作实例分析
2019/11/04 Python
详解python如何引用包package
2020/06/07 Python
公司庆典活动邀请函
2014/01/09 职场文书
公司成立感言
2014/01/11 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
学校运动会广播稿
2014/10/11 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android