首页 > 其他分享 >如何解决字体加密?

如何解决字体加密?

时间:2022-11-22 22:47:33浏览次数:49  
标签:加密 name resp headers 字体 解决 glyf data

问题:怎么将源代码中的加密字体正常显示?

  当爬取数据时,经常会发现一些既不是想要的对应文字,也不是乱码。那么该网站是进行了字体加密的反爬虫。如何解决这一问题呢?

那么就会用到了我们的TTFont模块:

from fontTools.ttLib import TTFont

那么我们来看一下解决的流程,以实习僧网为例:

实习僧:https://www.shixiseng.com

1、获取网页源代码

url = "https://www.shixiseng.com/interns?keyword=python&city=%E5%85%A8%E5%9B%BD&type=intern"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"}

resp = requests.get(url,headers=headers)
print(resp.text)

  找到加密的字体,如:

2、在网页中找到加密字体格式

  通常在网页的(网络-字体-url)中,可直接转码下载。

下载后点击打开即可,这里会用到一个浏览文件的辅助性软件(High-Logic FontCreator),下载打开查看。

然后将文件放到pycharm中。

3、添加解密字体

找到相应文件(file),将数据进行手动整理至glyfmap字典中以用于读取。(数据不多手动整理即可,若编程能力底子厚可写一个程序自动提取内容,不过这个过程太麻烦0.0)。

font = TTFont("file")
glyf = font["glyf"]
glyfmap={
    0: glyf['uni30'],
    1: glyf['uni31'],
    2: glyf['uni32'],
    3: glyf['uni33'],
    4: glyf['uni34'],
    5: glyf['uni35'],
    6: glyf['uni36'],
    7: glyf['uni37'],
    8: glyf['uni38'],
    9: glyf['uni39'],
    'p': glyf['uni70'],
    'y': glyf['uni79'],
    't': glyf['uni74'],
    'h': glyf['uni68'],
    'o': glyf['uni6f'],
    'n': glyf['uni6e'],
    '工': glyf['uni5DE5'],
    '程': glyf['uni7A0B'],
    '师': glyf['uni5E08'],
}

4、寻找对应关系

在这里观察到&#由0代替,运用.replace代替即可。

resp = requests.get(url,headers=headers)
response = resp.text.replace("&#",str(0))
  • 读取解密字体
cont = font.getBestCmap()

  • 遍历键和值,将键转化为十六进制。

     

  • 将cont中的值转化为glyfmap中的值(赋值)。
name = glyf[name]

遍历glyfmap字典中的值,若其值与cont中的值相同,将源代码中的加密字体转换成解密后的字体。

for data,name in cont.items():
    hex_data = hex(data)
    print(hex_data)
    name = glyf[name]
    for data_new,name_new in glyfmap.items():
        if name_new == name:
            response = re.sub(hex_data,str(data_new),response)
  • 打印后就可以看到解密好的字体了。

5、完整代码展示

import requests
from fontTools.ttLib import TTFont
import re
url = "https://www.shixiseng.com/interns?keyword=python&city=%E5%85%A8%E5%9B%BD&type=intern"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52"}

# resp = requests.get(url,headers=headers)
# print(resp.text)

font = TTFont("file1")
glyf = font["glyf"]
glyfmap={
0: glyf['uni30'],
    1: glyf['uni31'],
    2: glyf['uni32'],
    3: glyf['uni33'],
    4: glyf['uni34'],
    5: glyf['uni35'],
    6: glyf['uni36'],
    7: glyf['uni37'],
    8: glyf['uni38'],
    9: glyf['uni39'],
    'p': glyf['uni70'],
    'y': glyf['uni79'],
    't': glyf['uni74'],
    'h': glyf['uni68'],
    'o': glyf['uni6f'],
    'n': glyf['uni6e'],
    '工': glyf['uni5DE5'],
    '程': glyf['uni7A0B'],
    '师': glyf['uni5E08'],
}
# 寻找对应关系
resp = requests.get(url,headers=headers)
response = resp.text.replace("&#",str(0))
# 读取解密字体
cont = font.getBestCmap()

for data,name in cont.items():
    hex_data = hex(data)
    print(hex_data)
    name = glyf[name]
    for data_new,name_new in glyfmap.items():
        if name_new == name:
            response = re.sub(hex_data,str(data_new),response)
print(response)

 

标签:加密,name,resp,headers,字体,解决,glyf,data
From: https://www.cnblogs.com/LoLong/p/16916744.html

相关文章

  • 解决数据分析落地难的一点经验
    数据分析的结论不能落地,是很多数据分析师的痛。数据分析师从被动提数,再到主动分析、洞察,最后结论落地。这是一个很长的过程,有很多技巧、方法,以及步骤可以帮助我们把分析结论......
  • 云原生边缘设备解决方案Akri on k3s初体验
    作者:涂家英,SUSE资深架构师,专注Cloud-Native相关产品和解决方案设计,在企业级云原生平台建设领域拥有丰富的经验。写在前面k3s是SUSE推出的为物联网和边缘计算构建的经......
  • [Bug0059]解决DBeaver执行脚本报错No active connection
    问题执行从外界保存到Scripts文件夹下的sql脚本文件(而不是DBeaver中创建的)打开后文件前会显示,而不是已连接的某个数据库场景使用DBeaver执行脚本导入新的数据原因需......
  • error:could not open ...jvm.cfg解决方法
     出现这种情况大多是因为电脑上之前安装过JDK,卸载重装之后,运行java命令会出现error:couldnotopen…jvm.cfg的错误。打开系统环境变量,查看PATH,会看到诸如此类的配置......
  • linux下通过rpath解决cmake动态编译后找不到动态链接库问题
    通过cmake编译链接动态库后,会有一个问题,那就是需要的.so文件不能更改目录,一旦.so文件目录变了,整个程序就没法运行了,这肯定是不行的。原因后来我查一下一下,linux系统中,......
  • 5.【未解决】WARNING: You are using pip version 21.3.1; however, version 22.3.1 i
    遇到的问题:WARNING:Youareusingpipversion21.3.1;however,version22.3.1isavailable.Youshouldconsiderupgradingviathe'C:\Users\Administrator\Pychar......
  • Keil软件 fail to excute "C://C51//BIN//C51.exe"解决方案
    原因:编译器的路径因修改过而导致的错误解决方法:重新设置编译器的默认路径1、在Project->Components,Environment,Books...  2、Folders/Extensions 修改ToolB......
  • 解决MDL锁导致无法操作数据库的问题
    背景信息MySQL5.5版本开始,引入了MDL锁,用于解决或者保证DDL操作与DML操作之间的一致性,但是在部分场景下会出现阻塞,例如执行DML操作时执行ALTER操作、存在长时间查询时执行......
  • 一文解决 Go 安装和常用环境变量的配置
    耐心和持久胜过激烈和狂热。下载链接官网:​​https://golang.org/dl​​中国大陆的镜像站点:​​​​https://golang.google.cn/dl/​​在中国,推荐使用中国大陆的镜像站点下......
  • mapper里面id 爆红名 解决
    先确定自己写的id名是否存在,有没有写错如果没有就跟着下面的步骤,右键file------>点击setting------>找到点击editor----->点击Inspections----->找到点击mybatis----->......