文章导读
大家好,我是苏承栈。今天要和大家分享的是,如何用Python破解那些用字体加密的网站。相信很多朋友都遇到过这种情况,今天我们就来实操一下,用FontMap库轻松破解字体加密,获取我们想要的数据。
正文部分
首先,我们要爬取的网站是 https://fanqienovel.com/rank/1_2_124,通过开发者工具观察,发现文字使用了字体加密。接下来,我们要做的是找到并下载字体文件。通过抓包,我们找到了字体文件,然后下载保存到本地。
pip install FontMap
安装好FontMap库后,我们就可以开始使用它了。首先,我们要导入FontMap库,并设置保存路径和字体文件路径。
import FontMap
#savepath为生成的字形图片保存地址
#fontpath为下载的字形文件
fontmap = FontMap.HuiFontMap(savepath=r"C:\Users\21761\Desktop\新建文件夹",fontpath=r"C:\Users\21761\Desktop\dc027189e0ba4cd.woff2")
执行后,会生成字体字形图片,并按照savepath路径保存。接下来,我们使用FontMap库的ocr识别方法,生成字体映射。
fontmap = FontMap.HuiFontMap(savepath=r"C:\Users\21761\Desktop\新建文件夹",fontpath=r"C:\Users\21761\Desktop\dc027189e0ba4cd.woff2",issaveimg=False)
#这个方法会返回一个识别结果
#jsonpath设置结果保存,默认是不保存的
ocrContent = fontmap.ocrFontImg(jsonpath='fontmap.json')
print(ocrContent)
有了这个识别结果,我们就可以来替换请求页面原文本了。
import httpx
from lxml import etree
import json
#请求链接
url = 'https://fanqienovel.com/rank/1_2_124'
res = httpx.get(url).text
html = etree.HTML(res)
#获取标题
title = html.xpath('//[@href="/page/7112656623956397088"]//text()')[0]
#读取之前ocr保存的结果
with open('fontmap.json','r',encoding='utf-8')as f:
fontmap = json.load(fp=f)
print(title)
接下来,我们循环标题,获取每一个文本,去匹配ocr识别的结果,然后拼接。如果匹配不上,就说明不是加密文本。
t = ''
a = []
for i in title:
n = 'gid'+str(ord(i))
try:
t+=fontmap[n]
a.append(f'{n}:{fontmap[n]}')
except:
t+=i
print(t)
print(a)
运行之后,我们就可以看到我们想要的结果了。
最后,如果FontMap这个库有啥问题请告诉我,我没有经过很多测试,可能偶尔会报错。
小结与拓展
好了,今天的分享就到这里。希望这篇文章能帮助到大家解决字体加密的难题。如果大家还有其他问题,欢迎在评论区留言。我是苏承栈,我们下期再见!
关注极星编程网
想要了解更多编程技术,欢迎关注极星编程网(www.jxgpc.com),这里有更多精彩内容等你来发现!