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 相关文章推荐
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
python中(str,list,tuple)基础知识汇总
Feb 20 Python
浅谈Python中的私有变量
Feb 28 Python
python构建深度神经网络(DNN)
Mar 10 Python
python3.x实现base64加密和解密
Mar 28 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
你需要学会的8个Python列表技巧
Jun 24 Python
Python通过yagmail实现发送邮件代码解析
Oct 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
Php Cookie的一个使用注意点
2008/11/08 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
php中apc缓存使用示例
2013/12/25 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
javascript下数值型比较难点说明
2010/06/07 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python队列Queue的详解
2019/05/10 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
Django密码存储策略分析
2020/01/09 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
Python 操作 MySQL数据库
2020/09/18 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
自荐信的禁忌和要点
2013/10/15 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
我爱我校演讲稿
2014/05/21 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
毕业实习感受与体会
2015/05/26 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
Python OpenCV快速入门教程
2021/04/17 Python