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 09 Python
Python选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
python 换位密码算法的实例详解
Jul 19 Python
python的多重继承的理解
Aug 06 Python
python读取Excel实例详解
Aug 17 Python
python实现推箱子游戏
Mar 25 Python
Python中shapefile转换geojson的示例
Jan 03 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
python绘制多个子图的实例
Jul 07 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
python和anaconda的区别
May 06 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
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
jquery ready函数源代码研究
2009/12/06 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
python实现发送邮件及附件功能
2021/03/02 Python
python操作列表的函数使用代码详解
2017/12/28 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Pytorch之finetune使用详解
2020/01/18 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
在python中使用nohup命令说明
2020/04/16 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
拾金不昧感谢信范文
2015/01/21 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
详解Redis瘦身指南
2021/05/26 Redis
浅谈PHP7中的一些小技巧
2021/05/29 PHP
python常见的占位符总结及用法
2021/07/02 Python