首先,什么是自定义字体
1. 自定义字体,就是为了防止爬虫获取数据,对某些重要的数据进行自定义字体的方式进行处理。
爬虫获取的数据是类似于这样的(以猫眼电影为例):
<span class='score-num'><span class="stonefont">.万</span>人评分</span>
多少人评分这里应该是268.1万人评分,这里进行了自定义字体的方式进行的处理。
自定义字体分为动态和静态两种
动态自定义字体就是每次加载字体的值都不同,静态自定义字体就是固定的字体对应固定的字符。
而猫眼电影原来是动态自定义字体,最近换成了静态自定义字体。
相对动态自定义字体来说,静态自定义字体很好解决。
在这里我们看到
. 分别对应着268.1
也就是说 是2,是6,是8,是1
那么只需要做一个映射关系,获取到的数据进行字符串替换即可。
动态自定义字体的破解
动态自定义字体相对来说比较难破解,这需要花费时间来进行一一对比规律。
毕竟无论如何,不可能说这次生成的字和下次生成的字不一样,
他一定是按照某个规律,不可能超过这个规律来生成字体的。
注意:自定义字体文件后缀名一般是.woff和.ttf ,所以可以利用全局搜索的方式查看在哪里。
找到了字体文件之后,可以查看他的生成规律。
分享一个在线查看字体的网站:
http://blog.luckly-mjw.cn/tool-show/iconfont-preview/index.html

注意红色箭头标注的,很重要。
- 接下来就该分析字体了。但是问题是woff文件无法读取也无法查看源码怎么办?
Python中有一个处理字体的类库,叫做fontTools
安装的话网上很多教程,就不赘述了。
安装好这个类库之后,使用它对woff/ttf进行转换,转为xml格式的文件
xml文件类似于html文件,有html基础的就应该能读懂。
from fontTools.ttLib import TTFont
fonts = TTFont(r"字体文件路径")
fonts.saveXML("文件.xml")
生成的xml文件打开大概是这样的:

注意红框选中的内容,是不是很眼熟?没错,就是在线预览那里箭头指向的值。
找到值之后,接下来就是根据name来定位对应数字在哪里
比如数字6对应:uniF4EF
那么就在xml文件中搜索uniF4EF
搜索结果:

上面的图片即是搜索结果。
我们发现,9是由两个contour组成的,而每个contour中都有n个pt标签,
pt标签又是由x,y,on组成的。于是联想到了坐标轴。
pt就是坐标轴上的每一个点。
于是利用坐标轴画出数据,最终连成了一个数字9。

接下来是找规律,这个过程很漫长很痛苦,不过如果知道规律的话,其实也不难了。
一般来说找规律两种方式:
1. 按照contour的数量划分组,按照pt的数量划分数字取值范围,
最后找出差值的波动范围阈值,用于写映射关系,如猫眼
2. 根据x,y的变化规律来找出定理。
如58网,需要分析x2,x1,y2,y1的差值,
而差值固定就是某个字符的值,如(1588, 0): '男', (868, 0): '王', (825, 367)
找到规律之后,我们就可以进行字符替换了,其中&#x 就是无用字符,直接舍弃就好,其他的按照映射方式进行一一替换即可。

好了,以上就是自定义字体的破解方法,欢迎大家评论,转载,点赞~
网友评论