字体反爬

 

1.页面看到的文字实际由另一个字经过字体库映射而得 

 

2.网页会在加载的时候载入字体库 (可能有多个字体库),将此字体下载下来,通过font creator(字体工具)打开可以看到对应表,遍找到了映射关系。(笨方法到这直接对着写map就可以了)

 

3.用python 将.woff的字体文件 转成 XML 读取其中的映射。下图为第一层映射,根据code 可以得到 name (简单的一步映射就直接能得到结果)。

4.天眼查这个还需要再做一层,如图将上一步得到的name值 映射得到id值 ,这个id值就是 刚才fontcreator 看到的汉字的排序。在这里做个map对应即可得到映射汉字。

5.上述方法也还是要写一个map 。下图是"_#103" 所对应的字形,python的这个库肯定有一个方法直接根据字形得到汉字的 ,不然贼蠢,但我没找到。。。欢迎大家补充一下。

附录代码:

from fontTools import unichr
from fontTools.ttLib import TTFont
import re

'''
解析字体方法1:
'''
font = TTFont('./tyc-num.woff')  # 打开文件
# font.saveXML('./tyc-num.xml')

mappings = {}
for k, v in font.getBestCmap().items():
    if v.startswith('uni'):
        # 形如 <map code="0xe040" name="uni45"/>  可直接转换得到结果
        mappings['{:x}'.format(k)] = unichr(int(v[3:], 16))
    else:
        mappings['{:x}'.format(k)] = v

key = re.search('.*u([0-9a-f]{4}).*', str('电'.encode('unicode_escape'))).group(1)
value = mappings[key]
# 得到另一个映射
id = font.getGlyphID(value)

# 根据下载的字体弄个map 再根据 id做key  获取对应value
maps = {'1': '苏', '2': '你'}

 

-------------------------------------------------我是分割线--------------------------------------------------

欢迎关注博主个人公众号,一起来嗨皮呀


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值