Python响应对象text属性乱码解决方案

作者:何梦吉他 时间:2023-07-31 13:06:41 

在获得网页响应对象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")

来源:https://www.cnblogs.com/hemengjita/p/12496110.html

标签:Python,响应,对象,text,乱码
0
投稿

猜你喜欢

  • vue和react等项目中更简单的实现展开收起更多等效果示例

    2024-05-29 22:47:35
  • django 使用内置messages的操作

    2023-04-23 13:35:56
  • Python编码时应该注意的几个情况

    2021-03-15 20:59:54
  • Python可视化程序调用流程解析

    2022-07-18 15:53:07
  • Python API len函数操作过程解析

    2021-01-29 01:15:29
  • php 的反射详解及示例代码

    2024-06-05 09:46:28
  • .Net Core导入千万级数据至Mysql的步骤

    2024-01-19 17:05:59
  • 一文教会你在sqlserver中创建表

    2024-01-17 11:42:57
  • python面试题之列表声明实例分析

    2022-01-10 12:46:51
  • OpenCV学习方框滤波实现图像处理代码示例

    2023-02-08 17:17:43
  • javascript for-in有序遍历json数据并探讨各个浏览器差异

    2024-05-25 15:18:17
  • Python实现多线程下载文件的代码实例

    2022-11-06 02:41:12
  • 优化SQL Server的内存占用之执行缓存

    2012-04-13 11:45:06
  • 利用XMLHTTP无刷新自动实时更新数据

    2008-02-19 18:29:00
  • python基础教程之缩进介绍

    2022-11-20 07:41:57
  • 一步步详细讲解vue3配置ESLint

    2024-06-05 15:31:55
  • python内置堆的具体实现

    2022-12-18 08:39:43
  • 在Python中操作列表之List.pop()方法的使用

    2021-06-20 12:02:17
  • 细化解析:SQL Server 2000 的各种版本

    2009-02-05 15:41:00
  • PHP substr()函数参数解释及用法讲解

    2023-11-24 11:47:56
  • asp之家 网络编程 m.aspxhome.com