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采集博客中上传的QQ截图文件
Jul 18 Python
Python 编码处理-str与Unicode的区别
Sep 06 Python
Python调用C++程序的方法详解
Jan 24 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 Python
Python实现通讯录功能
Feb 22 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
Python button选取本地图片并显示的实例
Jun 13 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
python3 使用traceback定位异常实例
Mar 09 Python
Python局部变量与全局变量区别原理解析
Jul 14 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高级对象构建 工厂模式的使用
2012/02/05 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
sina的lightbox效果。
2007/01/09 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
JS跨域问题详解
2014/11/25 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Python 多线程实例详解
2017/03/25 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
python自动发微信监控报警
2019/09/06 Python
python数据分析:关键字提取方式
2020/02/24 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
写给老师的表扬信
2014/01/21 职场文书
机关出纳岗位职责
2014/04/03 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
青年志愿者活动感想
2015/08/07 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL