requests.text和requests.content的区别

requests.text和requests.content的区别

我们在利用requests库进行网络数据爬取时,通常遇到编码问题,在通过requests的get方法获取响应后,通常有response.text和response.content两种输出格式:

  1. response.content: 这个是直接从网络上面抓取的数据,没有经过任何解码,所以说是一个bytes类型。其实在硬盘上和网络上传输的字符串都是bytes类型。

因此在利用response.content进行输出时: 我们可以利用 resonse.content.decode()进行解码为unicode类型的数据即str字符串。

有的人喜欢使用resonse.content.decode(“utf-8”)进行解码,但本人更推荐使用resonse.content.decode(),因为有的时候还需要resonse.content.decode(“gbk”)等对其他各种类型的数据进行解码,因此不要使用"uft-8"进行写死。

  1. response.text: 这个是str的数据类型(unicode),是requests库将response.content进行解码后的字符串。而我们在解码的时候需要指定一个编码方式,requests在进行自动解码的时候需要猜测编码的方式,所以避免不了判断失误,就会导致解码产生乱码。

因此在利用response.text进行输出时,我们需要事先自定义地改变编码格式,防止requests推测编码方式失误。

例如:

(2.1)response.encoding = ‘utf-8’ 、response.encoding = ‘gbk’ (具体要看你请求地网页用什么方式进行编码,针对不同情况修改对应地编码方式)

(2.2)或者可以直接 response.encoding = response.apparent_encoding

补充:

response.encoding: 指的是requests库从http的响应头中猜测出来的响应内容编码方式

response.apparent_encoding: 指的是requests库从内容分析出的响应内容的编码方式(更为精确一点)

猜你喜欢

转载自blog.csdn.net/qestion_yz_10086/article/details/107950573