requests编码:避免下载网页乱码的两种方式(响应与编码)

简称requests为r
        在读取requests响应内容时,如果不对r.encoding(获取响应内容r.text时用于解码的编码格式)进行设置,常常读取到的r.text会是乱码的

原因:
        响应内容的原格式与程序用于解码r.text的格式不相同,导致乱码

1.requests.get()简述

在这里插入图片描述
函数原型如图,requests.get()用于发出请求最终获得响应,其返回值即响应对象,如图
在这里插入图片描述

2.对response object的处理(响应与编码)

当我们想要获得响应的内容时,通常我们使用:

  • 1 .content:获得的响应内容是字节形式的
  • 2 .text:获得的响应内容是文本形式的

那么,当我们使用requests.get().text取得响应内容时就需要考虑编码问题,这就涉及到encoding的设置问题

encoding的作用/含义是什么?即:
        Encoding to decode with when accessing r.text.
        就是说encoding指定了对requests.get().text解码时采用的编码格式

如果不设置encoding会怎样?
        当我们不主动设置encoding时,程序仍会根据http头自动猜测下载到的网页的编码格式,并应用到对requests.get().text的解码中

搞个例子:

import requests
import chardet
r=requests.get('http://www.baidu.com')
print('content:',r.content)
print('text:',r.text)
print('encoding:',r.encoding)

查看控制台输出:
        这里只截取r.text及r.encoding在这里插入图片描述
我们可以看到r.text显示乱码,而r.encoding自动猜测返回的是ISO-8859-1格式,这也是r.text乱码的原因,原格式与解码格式并不匹配(在这里原编码格式实际为“utf-8”)
得到原编码格式并赋值给encoding就是解决乱码问题的关键

3.得到响应内容(下载网页)编码格式的两种方法
3.1 requests.utils.get_encodings_from_content()

该方法由requests提供,用于获取传入字符串的编码格式并返回,得到正确的编码格式后赋值给encoding即可
在这里插入图片描述
程序:

import chardet
r=requests.get('http://www.baidu.com')
print('content:',r.content)
print('text:',r.text)
print('encoding:',r.encoding)

#2
r.encoding=requests.utils.get_encodings_from_content(r.text)
print('text_changed:',r.text)

控制台输出:
在这里插入图片描述

如上两图,经设置格式正常

3.2 使用chardet模块

chardet是一个优秀的字符串/文件编码检测模块
首先进行安装:

pip install chardet

安装完成后,即可在程序中使用

import chardet

使用chardet.detect()来返回一个字典,该字典中confidence为检测精度,encoding即检测到的编码形式,通常,我们将使用chardet检测到的编码直接赋值给r.encoding即可,实现r.text不出现乱码

实例如下:

import requests
import chardet
r=requests.get('http://www.baidu.com')
print('content:',r.content)
print('text:',r.text)
print('encoding:',r.encoding)
'''
#返回一个字典:编码格式、检测精确度
'''
print(chardet.detect(r.content))

r.encoding=chardet.detect(r.content)['encoding']
print('text_changed2:',r.text)

在这里插入图片描述
两种方法就分享完了,有其他防止request读取响应内容时出现乱码的方法欢迎沟通哦

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛涛ALG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值