Python requests乱码的五种解决办法

使用requests模块请求网页内容,经常会出现乱码,例如:

import requests
res = requests.get("https://www.baidu.com/")
print(res.text)

乱码的原因是内容编码和解码方式不一致导致的,解决办法有以下几种解决办法:

第一种:apparent_encoding

import requests
res = requests.get("https://www.baidu.com/")
res.encoding = res.apparent_encoding
print(res.text)

 第二种:content utf-8解码
一种临时性的解决办法,不建议用这种方法,相当于写死代码了。

import requests
res = requests.get("https://www.baidu.com/")
try:
    txt = res.content.decode('gbk')
except UnicodeDecodeError as e:
    # print(e)
    txt = res.content.decode('utf-8')
print(txt)

 

 第三种:chardet

import requests
import chardet
res = requests.get("https://www.baidu.com/")
encoding = chardet.detect(res.content)['encoding']
print(res.content.decode(encoding))

 第四种:cchardet
cchardet需要提前安装一下:​​pip install cchardet​​。

import requests
import cchardet
res = requests.get("https://www.baidu.com/")
encoding = cchardet.detect(res.content)['encoding']
print(res.content.decode(encoding))

 chardetcchardet的区别:cchardetchardet 的一个加速版本,使用了C语言实现,因此性能更高

chardetcchardet 都是 Python 库,用于字符编码检测,主要用于确定文本数据的字符编码格式(如UTF-8、ISO-8859-1等),以便正确地解析和处理文本数据。它们之间的主要区别在于性能和实现语言。

  1. chardet:

    • chardet 是一个用 Python 编写的字符编码检测库。
    • 它的性能相对较慢,因为它是一个纯Python库,不是特别适合处理大型文本数据。
    • chardet 基于统计模型和启发式算法,通过分析字符的分布和出现频率来猜测文本的编码。
    • 你可以使用 chardet 安装它,通常是通过 pippip install chardet
  2. cchardet:

    • cchardetchardet 的一个加速版本,使用了C语言实现,因此性能更高。
    • 由于它是用C编写的,所以在处理大型文本文件时速度更快,适用于需要高性能字符编码检测的应用。
    • cchardet 通常被认为是 chardet 的替代品,可以无缝替代 chardet,因为它提供了相同的接口。
    • 你可以使用 cchardet 安装它,通常是通过 pippip install cchardet

总之,如果你需要进行字符编码检测并且对性能有较高要求,可以考虑使用 cchardet。如果性能不是首要考虑因素,或者你需要在某些环境中使用纯Python库,那么 chardet 仍然是一个不错的选择。

 第五种:encode + decode

import requests
import cchardet
res = requests.get("https://www.baidu.com/")
res_encoding = res.encoding  # 响应的编码方式
con_encoding = cchardet.detect(res.content)['encoding']  # 内容的编码方式
print(res.text.encode(res_encoding).decode(con_encoding))  # 重新编解码text

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值