一、什么是字体反爬
网页开发者自己创造一种字体,因为在字体中每个文字都有其代号,那么以后在网页中不会直接显示这个文字的最终的效果,而是显示他的代号,因此即使获取到了网页中的文本内容,也只是获取到文字的代号,而不是文字本身。
简单的说,字体反爬指的就是浏览器页面上的字符和调试窗口或者源码中的内容,显示的不一样,这就是字体反爬。
二、编码原理
bit(比特):是由0或1构成的二进制位
Byte(字节):1个字节由八个连续的二进制位,或二个16进制数表示
字符:是指计算机中使用的字母、数字、字和符号
2.1、ASCII编码对照表
ASCII码
ASCII 码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
2.2、Unicode编号
Unicode码
Unicode为世界上所有字符都分配了一个唯一的数字编号,这个编号范围从 0x000000 到 0x10FFFF(十六进制),有110多万,每个字符都有一个唯一的Unicode编号,这个编号一般写成16进制,在前面加上U+。例如:”爬“的Unicode是U+722C。它是一种规定,Unicode本身只规定了每个字符的数字编号是多少,并没有规定这个编号如何存储。
理论上可以直接把Unicode编号直接转换成二进制进行存储,而Unicode并不是这么操作,因为除了这种直接转换成二进制的方案外,还有其他方案,主要有UTF-8,UTF-16,UTF-32,gbk。(UTF-8、UTF-16、UTF-32……都是 Unicode编码 的一种实现。)
2.3、UTF-8编码方式
UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8 的编码规则很简单,只有两条:
-
对于单字节的符号,字节的第一位设为
0
,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。 -
对于
n
字节的符号(n > 1
),第一个字节的前n
位都设为1
,第n + 1
位设为0
,后面字节的前两位一律设为10
。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
汉字的UTF-8编码(n字节)表示
- 获取汉字unicode编号
- 转化为二进制数
- 根据UTF-8编码格式,将二进制数据填充到指定位置
- 将填充好的新二进制数据,转换成16进制
例:
1、获取汉字unicode编号
ord('爬') =》29228
hex(29228) =》'0x722c'
2、转化为二进制数
bin(29228) =》'0b111001000101100'
3、根据UTF-8编码格式,将二进制数据填充到指定位置
(29228>2048所以选3的: 1110xxxx 10xxxxxx 10xxxxxx)
11100111 10001000 10101100
4、将填充好的新二进制数据,转换成16进制
hex(int('11100111',2)) =》'0xe7'
hex(int('10001000',2)) =》'0x88'
hex(int('10101100',2)) =》'0xac'
"爬".encode(&#