什么是字体反爬?
所谓的字体反爬就是网站一些关键字替换成自己设计的字体,这样用浏览器访问网站的时候会加载这套字体,因此在浏览器中显示是正常的字体;而在源码中这些关键字是乱码的,根本无法识别,采集下来是无用的信息
使用字体反爬的例子:抖音、大众点评、58等,如下是抖音的
解决字体反爬,以抖音为例
步骤:
1 提取抖音个人主页链接
个人主页—>右上角—>分享—>复制链接,在浏览器打开
示例:
https://www.iesdouyin.com/share/user/76725372134
提取一小段源代码:
<span class="num">
<i class="icon iconfont follow-num">  </i>
<i class="icon iconfont follow-num">  </i>
<i class="icon iconfont follow-num">  </i>
<i class="icon iconfont follow-num">  </i>.
<i class="icon iconfont follow-num">  </i>w
</span>
<span class="text">粉丝</span>
2 找出字体
既然网站加载了字体,那么我们可以通过抓包找出它
将这个字体改名:dy.woff
3 用字体软件FontCreator打开这个字体文件
下载FontCreator,然后打开字体,或者使用百度在线字体编辑器也可以
百度字体编辑器:http://fontstore.baidu.com/static/editor/
如下:看看这个字体是如何映射的?
比如 显示数字3,映射关系 3
–>num_2
—>$E604或$E611或$E61A
—>或或
4 解决方法:
-
笨办法:手动用字典多对一,然后替换掉,这适合比较少的字体
-
用Python工具 fontTools 来映射 ,用pip安装
这个工具可以把字体文件转换成xml文件,这样就可以看到映射关系,如下:
from fontTools.ttLib import TTFont
font = TTFont('dy.woff')
font.saveXML('dy.xml')
with open('dy.xml', 'r') as f:
reader = f.read()
print(reader)
提取xml文件中的cmap字段,cmap是映射表,如下:
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x78" name="x"/><!-- LATIN SMALL LETTER X -->
<map code="0xe602" name="num_"/><!-- ???? -->
<map code="0xe603" name="num_1"/><!-- ???? -->
<map code="0xe604" name="num_2"/><!-- ???? <