一、前言
在网络爬虫开发中,很多网站会采用字体加密技术来保护其内容,防止被简单地抓取。番茄小说就是其中之一,它通过自定义字体将小说正文的字符映射到了 Unicode 私有用区,使得直接抓取到的 HTML 源码是一堆无法直接阅读的'乱码'。
本文将详细介绍如何使用 Python 破解这种字体加密,自动获取并还原番茄小说的真实内容。
二、核心思路
主要爬虫逻辑:
- 如何发送请求:使用 Python 库向服务器发起网络请求
- 发送给谁:明确目标资源的 URL 地址
- 怎么伪装自己:设置请求头,模拟正常浏览器行为,避免被识别为爬虫
- 响应信息处理:接收服务器返回的数据,并从中提取有效内容
破解字体加密的核心流程:
- 分析网页:在小说页面打开检查--网络--字体找到自定义字体文件(通常是 .woff 或 .woff2 格式),右键在新标签页中打开下载
- 渲染字体:将字体文件中的每个字符渲染成一张高对比度的黑白图片
- OCR 识别:使用 OCR 工具识别出每张图片对应的真实文字
- 构建映射:建立'字体码点 → 真实文字'的映射字典
- 内容还原:使用这个字典将抓取到的乱码文本替换为真实可读的内容
三、环境准备
首先,我们需要安装几个关键的 Python 依赖库:
注意:ddddocr 库建议配合 Python 3.11 或 3.10 版本使用。
四、代码实现
获取映射字典
1. 字体渲染函数
这个函数负责将字体中的一个 Unicode 码点渲染成一张清晰的黑白图片,为后续的 OCR 识别做准备。
2. 字体识别与映射构建函数
这个函数遍历字体中的所有字符,调用上面的渲染函数生成图片,然后使用 OCR 识别,最终构建出破解字典。
3. 获取字体映射规则
下载的 .woff 字体文件需将其放在与 Python 文件同一位置的文件夹中,打开 .woff 文件需借助 FontCreator 等字体编辑工具。
主爬虫逻辑
1. 分析 + 思路
此时仅获取的是第一章的内容,又经过网页分析,发现番茄小说里面下一章按钮是 button 元素,没有 href,故回到目录页进行提取 href。
经过分析,发现章节 href 差异是数字 id 不同,故提取所有的数字 id,再循环遍历。
2. 获取所有加密的章节内容
以下是爬取所有加密的章节内容代码(读者可自行调整获取章节数量)。
3. 进行解密
由于之前已经获取到了映射字体规则:mapping,故将加密内容与映射规则替换即可。
五、整体代码
结合上述字体映射获取与爬虫逻辑,可编写完整脚本实现自动化获取与解密。

