Python爬虫之网页编码格式查询与编码格式详解

学了爬虫之后,我一直在纠结一个问题,那就是decode与encode
在这我也分享一下我的见解
首先我们都知道不同网页的编码格式是不一样的
查询方法如下:
Python爬虫之网页编码格式查询与编码格式详解_第1张图片
Python爬虫之网页编码格式查询与编码格式详解_第2张图片
当我们知道编码格式后就可以解析网页并转换格式
代码是这样的

     url = "     网-----------址    "
     a = urllib.request.urlopen(url)
     result = a.read().decode('gbk')          # 读取源代码并转为unicode

浅谈encode与decode的区别:

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

代码中字符串的默认编码与代码文件本身的编码一致。

如:s=‘中文’

如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

如果字符串是这样定义:s=u’中文’

则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。

如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:

isinstance(s,unicode)    #用来判断是否为unicode

**摘自 **https://blog.csdn.net/a921800467b/article/details/8579510

为了不会出现中文乱码,代码开头加上以下注释

# -*- coding:utf-8 -*-

主要作用是指定文件编码为utf-8, 因为一般默认的是ASCII码,如果要在文件里面写中文,运行时会出现乱码,加上这句之后会把文件编码强制转换为utf-8运行时会就不会出现乱码了。**

Unicode

Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号范围从 0x000000 到 0x10FFFF(十六进制),有110多万,每个字符都有一个唯一的Unicode编号,这个编号一般写成16进制,在前面加上U+。例如:“马”的Unicode是U+9A6C。

Unicode就相当于一张表,建立了字符与编号之间的联系

它是一种规定,Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。

Python爬虫之网页编码格式查询与编码格式详解_第3张图片

UTF-8就是在互联网上使用最广的一种Unicode的实现方式

想了解ASCII、Unicode、UTF-8的区别与联系可以看这
ASCII、Unicode、UTF-8的区别

你可能感兴趣的:(Python)