在爬虫的时候经常会遇到URL中包含中文字符,可以直接指示到.jpg .gif .mp3/4…等文件的地址。但是因为是中文,URL中无法直接显示。网站一般会采用编码或者加密的方式对中文字符进行处理。但是对于编码或者加密的方式不同网站有不同的方法。
通常采用的方式有一下几种:
一、Unicode编码
Unicode编码通常由两个字节组成,称作USC-2,个别偏僻字由四个字节组成,称作USC-4。前127个还表示原来ASCII码里的字符,只不过由一个字节变成了两个字节。
unicode编码基本格式为U开头,以斜杠分开。如图所示:
优点:可以囊括多国语言,囊括了常用汉字
不足:表示一个英文字符由一个字节变成了两个,浪费存储空间和传输速度。生僻字表示不足
二、UTF-8编码
Unicode编码的一种,Unicode用一些基本的保留字符制定了三套编码方式,它们分别为UTF-8,UTF-16,UTF-32.在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处是UTF-8保留了ASCII字符的编码作为它的一部分。UTF-8俗称“万国码”,可以同屏显示多语种,一个汉字通常占用3字节(生僻字占6个)。为了做到国际化,网页尽可能采用UTF-8编码
以&#x开头,分号分隔。如图所示:
三、GB2312
GB2312简体中文编码,一个汉字占用2个字节,在大陆是主要的编码方式。当文章/网页中包含繁体中文、日文、韩文等时,这些内容可能无法被正确编码。
作用:国家简体中文字符集,兼容ASCII
位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。
范围:高字节从A1-A7,低字节从A1到FE。将高字节和低字节分别加上0xA0即可得到编码。
编码格式如下图,基本是四个字符代表一个汉字字符。
四、BIG5编码
称为繁体中文编码,主要在台湾地区使用。
五、GBK编码
作用:它是GB2312的扩展,转换后的格式和GBK2312一样,加入对繁体字的支持,兼容GB2312.
位数:使用2个字节表示,可表示21886个字符。
范围:高字节从81到FE,低字节从40到FE.
六、GB18030编码
作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。
位数:它采用变字节表示(1ASCII, 2,4字节)。可表示27484个文字。
范围:1字节从00到7F;2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39.
加密方式:
对于有些url中的代表中文的部分并不是如上的格式编码的情况,可能是进行过加密。验证是否是标准加密方式加密的土方法,就是将汉字部分,直接进行搜索。如果能跳出多个不同的网站,可证明是某种标准的加密方式。
如图所示,我搜索的这段字符串实际代表的就是“云”这个汉字。在直接将加密后的字符串进行搜索后,跳出很多不同的网页。表明不止那个网站用这种加密,即这是一个标准统一的加密方式。
详细数一下位数,整个编码是32个数字。查询一下32位加密的方式,可能是MD5。通过代码逆向加密进行验证。
验证正确。
python3中,MD5加密归纳到了Hashlib库中了。
代码:
import hashlib
data = "云"
hashlib.md5(data.encode(encoding = 'utf-8')).hexdigest()
其他加密方式还有base64,RSA加密等。这些在爬虫工作中暂时还没有遇到。不展开记述。