爬取自定义字体数据

用自定义字体做反爬的网站,像实习僧,58同城,天眼查,会出现像下图的情况,审查元素有些数据无法正常显示,或者是显示的与实际的不一样。本文以实习僧为例大致讲解破解流程。

遇到这种情况,打开页面源码,会发现这些数据都是&#x写法的NCR字符,属于HTML中的Unicode的转义序列,但使用的Unicode是私有区(E000~F8FF)的,没有对应的文字,而是通过自定义的字体文件显示成对应的文字。

果然在HTML的style中找到了自定义字体myFont的声明

抓包找出链接并下载该字体文件。不过该文件没有后缀名,用TXT打开它,发现是以wOFF开头,表明这是一个woff格式的字体文件,所以给它加上.woff后缀。

查看该文件,我推荐百度的字体编辑器:http://fontstore.baidu.com/static/editor/index-en.html

在该FontEditor平台上打开刚刚的字体文件,即可看到自定义的字形和对应的Unicode

这样只需建一个字典,做映射,将Unicode转换成对应的文字。

from fontTools.ttLib import TTFont
font = TTFont(r'1.woff')
font.saveXML(r'2.woff')
gly_list = font.getBestCmap()
print(gly_list)

上述代码能够将下载的字体文件转成XML格式,并输出每个字的Unicode的十进制数字和name,所以接下来将输出的东西与文字相对应上即可。

另外,有些网站的字体文件是动态变化的,即每刷新一次页面就会生成一个新的字体文件。这种情况虽然看似很难解决,其文字和Unicode的对应关系是时刻变化的,但文字和文字的轮廓矢量数据的对应关系是保持不变的。而上面提到的XML中,可以找到详细的字体文件数据,用TXT打开2.woff即可查看,其中关联了Unicode与文字的轮廓矢量数据,这样就能求出当前Unicode所对应的文字。

点赞 分享

发表评论

共有 0 条评论