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查询mysql中文乱码问题
Nov 09 Python
Python使用Flask框架获取当前查询参数的方法
Mar 21 Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
python字典DICT类型合并详解
Aug 17 Python
Python多层装饰器用法实例分析
Feb 09 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
python异步编程 使用yield from过程解析
Sep 25 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进行MySQL删除记录操作代码
2008/06/07 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
js验证表单大全
2006/11/25 Javascript
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
axios 封装上传文件的请求方法
2018/09/26 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
python绘制立方体的方法
2018/07/02 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
django model通过字典更新数据实例
2020/04/01 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
为什么需要版本控制
2016/10/28 面试题
森林防火工作方案
2014/02/14 职场文书
健康家庭事迹材料
2014/05/02 职场文书
离职保密承诺书
2014/05/28 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
2014年社区工作总结
2014/11/18 职场文书
2014年财政工作总结
2014/12/10 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
Python 绘制多因子柱状图
2022/05/11 Python