爬取网页中文乱码的问题

基本知识

计算机只能处理数字,所以将一个数字对应一个符号,所以不同的数字对应不同符号的方式有不同为不同编码方式。

ASCII码 :英文字符和二进制数字之间的关系。一个符号为一个字节(byte),一个字节是8位(bit),所以总体共可以组合为2的8次方也就是256种状态。对于英文字符是足够表示了,然而对于汉字和其他国家256个符号时不够的。
gb2312 : 中文字符和二进制数字之间的对应关系。一个符号为两个字节,共16位,可以表示256*256个汉字。
Shift_JIS : 日文和二进制数字之间对应的关系。
Unicode : 不同国家的编码方式使得同一个二进制数字对应不同的字符,在多语言的文本中很有可能出现乱码。为了使得各国语言能够顺利进行文本转化与处理,有人发明了Unicode编码方式。Unicode被称为统一码,它为每个国家的符号都提供了唯一的二进制数字的对应关系。
UTF-8 : Unicode为了表示各种字符,所以占有字符的空间比较大。比如说ASCII码为一个字节,而Unicode通常是两个字节,这时候表示ASCII码时就会出现一个字节的空间浪费现象,所设计了节省空间的一些中间格式的字符集,被称为通用转换格式UTF(Unicode Transformation Format),UTF-8就是这种节省空间长度可变的格式。

爬取网页遇到的中文乱码

如下图所示,网页的内容时乱码的,不能识别
中文乱码
可能原因:
(1).网页采用GB2312的方式编码
查看网页源代码的头部,如果是如下图charset=geb2312的方式编码,则说明是中文乱码的原因。
编码方式

解决办法:
获得内容后,将内容进行重新编码,使用Python爬虫进行爬取时,解决的具体代码是:

#已知网页的url和headers,使用requests获取网页
r = requests.get(url, headers=headers)
#对网页进行gb2312解码
r.encoding('gb2312')
print(r.text)

(2)网页进行了gzip压缩
进行网页查看的时候,网页头部是正常的,不是因为gb2312的编码原因,如下图所示,这是网页可能是因为使用了gzip方式压缩了。
正常编码

解决方法:对网页解压缩,解压缩的方式如下:

#已知网页的url和headers,使用requests获取网页
r =requests.get(url, headers=headers) 
#进行解码
content = r.content.decode('UTF-8')
print(content.text)

解决后的结果如图所示
结果正常

猜你喜欢

转载自blog.csdn.net/qq_31385713/article/details/83111282