本文章中所有内容仅供学习交流使用,不用于其他任何目的,敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除
url : aHR0cHM6Ly93d3cucHl0aG9uLXNwaWRlci5jb20vY2hhbGxlbmdlLzEy
- 第一步:先打开F12来分析一下,我们看到的数据都是加密的啊!经常遇到字体反爬的人看到这些加密,应该会觉得很眼熟,那就去font里看一看,有一个woff文件,这就是字体加密,而且还是静态的。
- 第二步:我们把字体文件下载下来,先打开看一下吧!(这里我们用到了FontCreator软件可以自己下载),把字体直接拖拽到FontCreator里就可以
- 第三步:看到了对应关系后,我们把它直接转成xml格式,用到了python中的fontTools库,这里保存后自己看一下对应关系,也有助于分析
from fontTools.ttLib import TTFont
# 加载ttf文件
font = TTFont("aiding.woff") # 打开当前目录的 movie.woff 文件
font.saveXML("aiding.xml") # 另存为 movie.xml
- 第四步:读取数据手动生成对应关系
cmp_lists = font.getGlyphOrder() # 取出 <GlyphOrder> 标签中的 name
print(cmp_lists)
for index,unicode in enumerate(cmp_lists):
aaa = font['glyf'][unicode].flags
on_z = str(aaa).replace("\\x0", "").replace("bytearray(b'", "").replace("')", "")
print(unicode,':', on_z) # 获取对应关系
# .notdef : 111
# unie458 : 1001101111
# unif375 : 100110101001010101011110101000
# unif80c : 10101100101000111100010101011010100101010100
# unif12f : 111111111111111
# uniee4a : 1110101001001010110101010100101011111
# unif295 : 10101010100001010111010101101010010101000
# unie449 : 1111111
# unif0d6 : 101010101101010001010101101010101010010010010101001000010
# unie44d : 10010101001110101011010101010101000100100
# unif712 : 10100100100101010010010010
a_dict = {}
a_dict['111'] = '.'
a_dict['1001101111'] = 1
a_dict['100110101001010101011110101000'] = 2
a_dict['10101100101000111100010101011010100101010100'] = 3
a_dict['111111111111111'] = 4
a_dict['1110101001001010110101010100101011111'] = 5
a_dict['10101010100001010111010101101010010101000'] = 6
a_dict['1111111'] = 7
a_dict['101010101101010001010101101010101010010010010101001000010'] = 8
a_dict['10010101001110101011010101010101000100100'] = 9
a_dict['10100100100101010010010010'] = 0
- 第五步:生成对应关系后我们就可以直接使用对应关系来获取想要的数据
str_ = "    "
new_dict = {}
for z,cmp_name in enumerate(cmp_lists):
new_tag_name = cmp_name.replace("uni","&#x") + ' ' # 找到它替换的对应关系
# print('',new_tag_name)
aaa = font['glyf'][cmp_name].flags # 取出对应的bytearray(数字串)
on_z = str(aaa).replace("\\x0", "").replace("bytearray(b'", "").replace("')", "") # 将bytearray()这个格式转换成数字串
# print('数字:',on_z)
number_ = a_dict[on_z] # 找到对应的数字
new_dict[new_tag_name] = number_ # 存储起来方便查看结果
str_ = str_.replace(new_tag_name,str(number_)) # 将字符串里的字符一一对应替换
print(new_dict)
print("处理完的数据",str_)
欢迎技术交流!!!