字体反扒

什么是字体反扒

以实习僧网站为例,在网页是看数据都是正常的,而查看源代码,则可以发现有部分数据是乱码,这个就是字体反扒了

第一步

请求网页获取源代码,这个太简单了,不过多解释。

第二步

查找并获取字体文件。

在源代码中查找@font-face样式字样,这个就是自定义字体的样式了。

 然后打开开发者工具,找到该字体的请求链接进行保存即可。

font_data = requests.get('https://www.shixiseng.com/interns/iconfonts/file?rand=0.4297923496159244',
                                 headers=self.headers).content
        with open('实习僧.woff', 'wb') as f:
            f.write(font_data)

第三步

对字体文件进行解析获取对应关系

引用模块

from fontTools.ttLib import TTFont
import re

TTFont模块是处理字体文件的第三库,需要自行下载

# 初始化字体文件
font = TTFont('实习僧.woff')
# 将字体文件保存为xml格式
font.saveXML("./font.xml")
# 读取字体的xml格式文件
with open('./font.xml') as f:
    xml = f.read()
# 对xml文件解析
keys = re.findall('<map code="(0x.*?)" name="uni.*?"/>', xml)[:99]
values = re.findall('<map code="0x.*?" name="uni(.*?)"/>', xml)[:99]
# 解析字体文件的关系
for i in range(len(values)):
    if len(values[i]) < 4:
        values[i] = ('\\u00' + values[i]).encode('utf-8').decode('unicode_escape')
    else:
        values[i] = ('\\u' + values[i]).encode('utf-8').decode('unicode_escape')
word_dict = dict(zip(keys, values))
print(word_dict)

需要注意的是,在使用re模块对xml文件进行解析的使用,需要获取的内容是

<map code="0xe04e" name="uni653F"/>

中的code和name属性。 code属性值则是去掉0x这就是在源码中的字样,而name属性则是这个字体的属性,对字体解析则就是对这个属性进行解析获取对应关系的

最后输出的内容则是:

第4步

使用获取到的对应关系将网页上的数据进行替换即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值