python网站开发架构,网站建设要准备什么,程序员做音乐网站,中国网站排名 优帮云requests是一个较为简单易用的HTTP请求库#xff0c;是python中编写爬虫程序最基础常用的一个库。 而【中文乱码】问题#xff0c;是最常遇到的问题#xff0c;对于初学者来说#xff0c;是很困恼的。 本文将详细说明#xff0c;python中使用requests库编写爬虫程序时是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【CtrU】查看编码【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