在爬取某些网站的数据时,经常会发现爬下来的数据夹杂着乱码;但是网页上明明是正常的,这就是此网站做了字体反扒技术;
比如 https://su.58.com/qztech/ 这个网站,页面上看起来是正常的数据,但是审查元素会发现,都是乱码,如果我们去除了右下角红框标注的字体文件,会发现页面也会出现乱码
其实,这种字体文件,实质上就是一个字典,记载了乱码余正确数据之间的对应关系,在显示的时候,把“乱码” 替换成正确的数据
其实我们要做的很简单,就是把字体文件复制下来,保存为ttf,然后需要显示的时候,加载字体就可以了
右键查看源码,我们就会看到如下的字体文件,把它复制,base64解密后的结果保存为TTF格式;
然后下载FontCreator,打开后就是字体和编码的对应关系,如下图
但是需要注意的是啊,每次访问,字体是不变的,但是字的编码是变化的,并不是一一对应的;这是个大坑大坑!!!!!!!!
我们使用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库,将新字体和已知的字体对比,做映射,然后根据映射做替换