码农日记

薄洪涛的个人博客

python爬虫之字体反爬及解决方案

在爬取某些网站的数据时,经常会发现爬下来的数据夹杂着乱码;但是网页上明明是正常的,这就是此网站做了字体反扒技术;

比如  https://su.58.com/qztech/ 这个网站,页面上看起来是正常的数据,但是审查元素会发现,都是乱码,如果我们去除了右下角红框标注的字体文件,会发现页面也会出现乱码

image.png



其实,这种字体文件,实质上就是一个字典,记载了乱码余正确数据之间的对应关系,在显示的时候,把“乱码” 替换成正确的数据

其实我们要做的很简单,就是把字体文件复制下来,保存为ttf,然后需要显示的时候,加载字体就可以了

右键查看源码,我们就会看到如下的字体文件,把它复制,base64解密后的结果保存为TTF格式;

image.png


然后下载FontCreator,打开后就是字体和编码的对应关系,如下图

image.png


但是需要注意的是啊,每次访问,字体是不变的,但是字的编码是变化的,并不是一一对应的;这是个大坑大坑!!!!!!!!

我们使用fontTools这个包,来解析ttf文件

from fontTools.ttLib import TTFont
font_1 = TTFont('test.ttf')
font_base.saveXML('test.xml')

通过解析出来的xml文件,我们发现,同一个字体,虽然name值(编码)不一样,但是x,y,on是一致的;


其实这个x,y,on就是汉字的字形,可能会有略微的不同,但是大致差不太多的;


所以我们总结了爬取方案:

1、人工下载字体文件

2、fontcreate打开字体文件,找出已知的字体与编码对应关系

3、以后每次爬取的时候,先保存新字体

4、使用fonttools库,将新字体和已知的字体对比,做映射,然后根据映射做替换






发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处