当前位置:   article > 正文

python中——requests爬虫【中文乱码】的3种解决方法_python爬虫爬下来的文本是乱码

python爬虫爬下来的文本是乱码

requests是一个较为简单易用的HTTP请求库,是python中编写爬虫程序最基础常用的一个库。
而【中文乱码】问题,是最常遇到的问题,对于初学者来说,是很困恼的。
本文将详细说明,python中使用requests库编写爬虫程序时,出现【中文乱码】的原因,及常见3种解决办法。

一、【中文乱码】情况及出现原因

(一)【中文乱码】举例

首先,本文的【中文乱码】情况,指的是原网页中的中文内容在使用requests获取后,中文完全无法识别的情况,区别于\x、\u等编码情况。如下图中的例子:
在这里插入图片描述
注:requests.get()方法,返回一个response对象,其存储了服务器响应的内容。

(二)出现【中文乱码】原因

导致上图中【中文乱码】的原因:
使用requests库时,选择使用的文本响应方法不合适,且没有在代码中添加设置合适的编码,以致于使用【response.text】自动获取到的网页编码,与实际网页的编码不一致,进而产生【中文乱码】。
使用requests库时,可能已经形成了一个习惯,常用【response.text】进行文本响应,而【response.content】常用于图片、视频等。
这两者,最大的一个区别就是:
1、【response.text】会自动根据HTTP头部去推测网页的编码,解码并返回解码后的文本。
2、【response.content】不会解码,直接以二进制形式返回。
两种文本响应方法,如下表:

方法释义
response.text服务器响应的内容,会自动根据响应头部的字符编码进行解码。根据HTTP头部对响应的编码做出有根据的推测,推测文本编码。返回类型:str;常用于:响应文本
response.content字节方式的响应体,不会根据HTTP头部对响应的编码做出有根据的推测。返回类型:bytes(二进制);常用于:图片、视频

二、3种处理【中文乱码】的方法

(一)修改网页文本获取的方法

据上,已知原因是获取文本的方法不对,显然最简单、直接的方法就是:
直接将response.text换成response.content
在这里插入图片描述

(二)手动指定网页编码、再提取文本

据上,已知使用【response.text】时,会解码返回,但解码又与原网页编码不一致,而导致【中文乱码】。
鉴于response也提供了【response.encoding】,来指定返回后的网页编码。
所以解决方法可以是:
手动指定网页编码,使之得到正常的文本
该方法的较第一种,相对麻烦一点:
首先,需要确认原网页的实际编码,然后根据网页实际编码做出修改。
具体步骤如下:
1、查看网页编码
查看网页编码,有以下两种方式:
(1)直接打开网页源码(html)【Ctr+U】,查看编码:【charset】的值。
在这里插入图片描述
(2)使用response的encoding、apparent_encoding,得到网页编码。
encoding、apparent_encoding两者最大的区别:
encoding是从header中去提取,而apparent_encoding是从网页源码去解析,apparent_encoding得到的结果更准确。
详细如下表:

属性释义
response.encoding从网页响应的header中,提取charset字段中的编码。若header中没有charset字段,则默认为ISO-8859-1编码模式,ISO-8859-1编码无法解析中文,这也是中文乱码的原因。
response.apparent_encoding从网页的内容中(html源码)中分析网页编码的方式。所以apparent_encoding比encoding更加准确,获取到的才是原网页的实际编码。

以(1)中网址为例,网页的真实编码为【GB2312】。
使用encoding、apparent_encoding两种方法,所得的结果是不一致的,apparent_encoding才是原网页实际编码。如下图:
在这里插入图片描述
2、手动指定文本编码
根据上述方法,获得原网页的实际编码后,手动在代码中指定文本编码格式,即可解决【中文乱码】问题。
写法有2种,可任选其一,如下图:
在这里插入图片描述

(三)在文本获取后对【中文乱码】进行转码

除了以上2种解决办法外,还可以使用pyhton自带的编码方法,把【中文乱码】的内容再次进行转码,转换为成网页实际的编码格式即可。
转码方式:encode(‘iso-8859-1’).decode(‘编码格式’)
如上面例子中,网页编码实际为“gb2312”,代码可修改为:
在这里插入图片描述
以上就python使用requests库编写爬虫时,出现【中文乱码】的原因,及常见的三种处理方法,可供参考。

-end

学习资源推荐

零基础Python学习资源介绍

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/909914
推荐阅读
相关标签