Python爬虫-破解字体加密技术
字体加密是网站对抗爬虫的技术手段,通过自定义字体文件将关键数据映射为特殊编码。破解方法包括:1)静态字体通过解析TTF/WOFF文件获取编码映射;2)动态字体需实时下载并分析字形特征;3)混合加密需先解码Base64/SVG数据。核心工具包括fontTools、FontCreator等,实现时需注意反爬检测和动态更新映射关系。针对复杂场景可结合OCR技术,完整解决方案需根据具体加密方式调整。
字体加密是网站对抗爬虫的常见手段,通过自定义字体文件将关键数据(如价格、电话号码等)映射为特殊编码,使爬虫获取乱码而浏览器正常显示。以下是破解技术的核心方法和实践要点:
一、字体反爬原理
1.静态字体:字体文件固定,字符映射关系不变,如58同城通过CSS加载自定义字体文件,数字被替换为特定Unicode编码。
2.动态字体:每次请求生成不同字体文件,如猫眼电影票房数据使用动态WOFF文件,需实时解析映射关系。
3.混合加密:结合Base64编码或SVG映射,如大众点评将字体文件编码后嵌入CSS,需先解码再分析。
二、破解技术方案
1. 静态字体破解
步骤:
从网页源码或API响应中提取字体文件(TTF/WOFF)。
使用fontTools解析字体文件,获取cmap表中的编码映射关系。
建立编码与真实字符的映射字典,替换网页中的加密字符。
示例代码:
python
from fontTools.ttLib import TTFont
font = TTFont("font.woff")
cmap = font.getBestCmap() # 获取编码映射
relation = {"uniE908": "5", "uniE909": "3"} # 手动建立映射
2. 动态字体破解
关键点:
实时下载最新字体文件,分析字形坐标差异(如glyf表中的coordinates)。
对多次请求的字体文件聚类,提取稳定特征(如笔画数量)建立动态映射工具:
FontCreator可视化分析字形。
fonteditor在线工具辅助比对字体差异。
3. Base64/SVG加密处理
流程:
解码CSS中的Base64字体(如实习僧网站)。
解析SVG路径映射(如大众点评的eb类字符)。
代码片段:
python
import
base64
woff_data = base64.b64decode(css_text.split(
"base64,")[1].split(")")[0
])
with open("font.woff", "wb") as
f:
f.write(woff_data)
三、完整项目实现
以下为破解猫眼动态字体的完整代码框架:
import requests
from fontTools.ttLib import TTFont
from io import BytesIO
def parse_font(font_url):
font_data = requests.get(font_url).content
font = TTFont(BytesIO(font_data))
glyphs = font.getGlyphOrder()[2:] # 跳过前两个保留字符
# 根据坐标差异建立映射(示例逻辑)
return {glyph: str(i) for i, glyph in enumerate(glyphs)}
def main():
page_html = requests.get("https://maoyan.com/board/1").text
font_url = re.search(r"url\('(.*?\.woff)'\)", page_html).group(1)
mapping = parse_font(font_url)
# 替换页面中的加密字符...
四、注意事项
反反爬策略:部分网站会检测字体解析行为,需模拟正常请求头并控制请求频率。
OCR辅助:对复杂字体加密(如番茄小说),可结合Tesseract识别截图内容。
自动化更新:动态字体需定期校验映射关系,推荐使用cron定时任务。
以上方法覆盖了当前主流的字体反爬类型,实际应用中需根据目标网站的加密特点灵活组合。
更多推荐


所有评论(0)