229 lines
12 KiB
Markdown
229 lines
12 KiB
Markdown
# FreePEP 📚 人教社中小学电子教材批量下载器
|
||
[](https://opensource.org/licenses/MIT)
|
||
## <div align="center"><b><a href="README_EN.md">English</a> | <a href="README.md">简体中文</a></b></div>
|
||
|
||
**FreePEP** 是一款专为[人民教育出版社中小学电子教材平台](https://jc.pep.com.cn/)开发的自动化教材解析、批量抓取与高清 PDF 合成工具。
|
||
|
||
提供**WebUI 界面**与**交互式命令行**,内置全量 780+ 本教材目录(数据截止到2026年08月31日)自动解密引擎与阿里云 WAF 滑块验证码自动破解机制,支持一键下载指定学段、学科、年级的全套教材并自动生成高清 PDF 文件。
|
||
|
||
# 课本打包下载区 更新时间:2026年9月11日
|
||
|
||
老哥们,都是公开数据,没必要全部下载,哪怕你分几天拉呢,也照顾下其他人吧。?
|
||
已经改用D1数据库了,应该能顶一下。
|
||
|
||
**下都下了,点个Star吧**
|
||
|
||
|
||
## [小学(六三学制) 课本下载 纯文字版](txtlist.md) | [小学(六三学制) 课本下载 图文版](piclist.md)
|
||
## [初中(七-九年级) 课本下载 纯文字版](789txtlist.md) | [初中(七-九年级) 课本下载 图文版](789piclist.md)
|
||
## [高中 课本下载 纯文字版](gztxtlist.md) | [高中) 课本下载 图文版](gzpiclist.md)
|
||
|
||
|
||
---
|
||
# 2026/09/19 FreePEP 1.4
|
||
### 🚀 功能新增与改进 (Features & Improvements)
|
||
1. **支持下载原图高清版本 (Large Resolution)**:
|
||
- 核心下载器支持抓取 PEP 官方 `large` 目录高清原图(分辨率提升至 2174×3071),并自带 404 自动回退机制;
|
||
- WebUI 新增“下载高清原图版本”快捷勾选项,CLI 新增 `--high-res / --hd` 命令行参数与交互选择。
|
||
2. **文档补充**:
|
||
- README 新增常见问题排查(FAQ),针对 macOS 环境提示补装 `playwright install chromium`。
|
||
|
||
### 🐛 Bug 修复与代码重构 (Bug Fixes & Refactoring)
|
||
1. **空值异常修复**:修复 `cli.py` 与 `webui.py` 中因元数据字段 `nj: null` 导致的 `AttributeError: 'NoneType'
|
||
object has no attribute 'strip'` 隐蔽崩溃。
|
||
2. **架构重构**:将 `download_all.py` 内部嵌套的 `is_match_xd` 函数提取为模块顶层函数,提升可复用性与可测试性。
|
||
|
||
### 🧪 自动化测试与 CI 护栏 (Testing & CI)
|
||
1. **分层单元测试**:新建 `tests/test_all.py`(32 个测试用例全部通过),涵盖纯函数映射、排序权重、学段过滤、AES-
|
||
128-CBC 加解密 Round-trip、下载器离线快路径与 FastAPI WebUI 接口测试。
|
||
2. **开发依赖分离**:新增 `requirements-dev.txt`(`pytest`、`httpx`),避免污染生产/打包依赖。
|
||
3. **持续集成配置**:新增 GitHub Actions CI 工作流 (`.github/workflows/ci.yml`),在 Python 3.9~3.12
|
||
矩阵下自动运行自动化测试。
|
||
|
||
|
||
## ✨ 核心特性
|
||
|
||
- 🎯 **双操作模式**:
|
||
- **现代化 WebUI 界面**:全响应式布局,还原官网层级筛选体验,支持复选框一键批量下载、实时进度条展示与本地保存目录快捷打开。
|
||
- **交互式 CLI 终端**:支持数字菜单导航选择与命令行参数直达(脚本集成与服务器环境友好)。
|
||
- 📦 **高清单页下载与 PDF 合成**:自动探测各教材实际总页数,批量下载高分辨率原始 JPG,并通过 Pillow 库自动合成为标准 PDF 文件。
|
||
|
||
|
||
---
|
||
|
||
## 📸 界面预览
|
||
|
||
### WebUI 网页端
|
||

|
||
|
||
---
|
||
### CLI 网页端
|
||

|
||
|
||
|
||
# 🚀 使用方式
|
||
## 🖥️ 方式一:(推荐,适合小白)
|
||
直接下载发行包,解压缩后运行FreePEP.exe,在弹出的Web页面里面自行操作下载。
|
||
## 方式二:从源码启动
|
||
### 克隆仓库与安装依赖
|
||
```bash
|
||
# 克隆仓库
|
||
git clone https://github.com/siknet/FreePEP.git
|
||
cd FreePEP
|
||
|
||
# 安装 Python 依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 安装 Playwright 所需的 Chromium 浏览器内核
|
||
playwright install chromium
|
||
```
|
||
### 启动办法一:Webui
|
||
在终端中执行以下命令,系统将自动启动本地服务并在默认浏览器中打开管理页面:
|
||
```bash
|
||
python webui.py
|
||
```
|
||
* **访问地址**:`http://127.0.0.1:8000`
|
||
* **默认下载目录**:项目根目录下的 `./downloads` 文件夹(可在 Web 界面点击「📁 打开保存目录」直达)。
|
||
|
||
---
|
||
|
||
### 启动办法二:使用 CLI 命令行
|
||
#### 1. 交互式菜单模式
|
||
直接运行 `cli.py`,根据控制台提示逐步选择学段、学科与年级:
|
||
```bash
|
||
python cli.py
|
||
```
|
||
|
||
#### 2. 参数直达模式(适合自动化与脚本调用)
|
||
通过命令行参数直接指定条件过滤并自动开始下载:
|
||
|
||
```bash
|
||
# 1. 下载小学一年级的所有学科教材
|
||
python cli.py --xd "小学" --nj "一年级" -y
|
||
|
||
# 2. 下载高中数学的所有必修/选修教材
|
||
python cli.py --xd "高中" --xk "数学" -y
|
||
|
||
# 3. 下载初中全部教材
|
||
python cli.py --xd "初中" -y
|
||
|
||
# 4. 全局关键词搜索并下载(如包含"物理"的所有教材)
|
||
python cli.py --search "物理"
|
||
|
||
# 5. 清理本地临时图片缓存
|
||
python cli.py --clear-cache
|
||
|
||
# 6. 自定义 PDF 输出路径
|
||
python cli.py --xd "小学(六三学制)" --xk "语文" --nj "一年级" -o "D:/Textbooks" -y
|
||
```
|
||
|
||
**参数说明**:
|
||
| 参数 | 说明 | 示例 |
|
||
| :--- | :--- | :--- |
|
||
| `--xd` | 指定学段 | `小学(六三学制)`、`初中(六三学制)`、`小学(五四学制)`、`初中(五·四学制)`、`高中`、`培智学校`、`聋校`、`盲校(盲文版)`、`盲校(低视力版)` |
|
||
| `--xk` | 指定学科 | `语文`、`数学`、`英语`、`物理`、`化学`、`历史`、`道德与法治` 等 |
|
||
| `--nj` | 指定年级/册次 | `一年级`、`二年级` ... `九年级`、`专项`、`必修` 等 |
|
||
| `--search`, `-s` | 关键词全局搜索 | `必修`、`高一`、`地理` |
|
||
| `--high-res`, `--hd` | 下载高清原图版本 (`large`),默认普通版本 (`mobile`) | 无需参数 |
|
||
| `--clear-cache`, `-c` | 清理本地下载临时图片缓存 (`temp_pages`) | 无需参数 |
|
||
| `--refresh`, `-r` | 强制重新从官方服务器拉取解密最新目录 | 无需参数 |
|
||
| `--output`, `-o` | 指定 PDF 保存目录 | 默认: `./downloads` |
|
||
| `--yes`, `-y` | 跳过确认提示直接开始下载 | 开启免交互 |
|
||
|
||
### 启动办法三:按「学段 ➔ 年级」层级批量多线程下载 (download_all.py)
|
||
|
||
如果您希望将教材按照 **`学段/年级/`** 两层规范文件夹分类归档下载,直接运行专属的高速批量多线程下载脚本:
|
||
|
||
```bash
|
||
# 1. 一键下载全网全量教材(默认 3 线程并发,按「学段/年级」两层子目录自动归档)
|
||
python download_all.py
|
||
|
||
# 2. 启用多线程并发加速(例如 10 线程并行高速下载)
|
||
python download_all.py -w 10
|
||
|
||
# 3. 下载多个指定学段(支持逗号分隔,如:义务教育六三学制、五四学制与高中)并自定义保存路径
|
||
python download_all.py --xd "义务教育(六三学制),义务教育(五四学制),高中" -w 10 -o "D:/人教社教材"
|
||
|
||
# 4. 仅下载单个学段(如高中全部教材)
|
||
python download_all.py --xd "高中"
|
||
|
||
# 5. 仅下载某个指定年级教材
|
||
python download_all.py --nj "一年级"
|
||
```
|
||
|
||
**功能特性**:
|
||
* 🚀 **多线程并发提速**:默认 **3 线程**并发同时下载,支持通过 `-w / --workers` 自定义并发线程数(如 5~10 线程),下载效率大幅提升。
|
||
* 🎯 **支持多学段组合**:`--xd` 支持传入多个学段(逗号分隔),精准下载普通义务教育或高中学段,自动跳过特教教材。
|
||
* 🌲 **两层层级目录**:自动分类保存为 `downloads/<学段>/<年级>/<教材名>.pdf`,告别成百上千文件堆在单目录。
|
||
* ⚡ **智能断点续传**:已完整下载的教材**自动秒跳过**,中途随时中断无缝继续,绝不重复下载。
|
||
* 🧹 **切片自动清理**:每本教材合成 PDF 后自动清理临时图片分片,极大保护硬盘空间。
|
||
* 💬 **清爽紧凑输出**:不打印繁琐单页过程,仅在教材下载合并完成或跳过时输出进度与提示。
|
||
|
||
---
|
||
|
||
## 📦 一键打包为 Windows 独立 EXE 发行版
|
||
|
||
如果您想将本项目打包成 **脱离 Python 环境** 的独立绿色软件包发布给普通用户,只需执行工作区自带的一键打包脚本:
|
||
|
||
```bash
|
||
python build_exe.py
|
||
```
|
||
|
||
### 打包脚本会自动完成以下操作:
|
||
1. 自动检查并安装 `PyInstaller` 编译工具。
|
||
2. 将 WebUI 及所有 Python 依赖打包为独立可执行文件 `FreePEP.exe`。
|
||
3. **自动提取并内嵌绿色便携版 Chromium 浏览器内核**至 `browsers/` 目录。
|
||
4. 自动在 `dist/` 目录下生成 `FreePEP-Windows-x64.zip` 发行压缩包。
|
||
|
||
> **分发给用户使用**:用户下载压缩包后解压,**双击 `FreePEP.exe` 即可直接使用**(会自动弹出系统默认浏览器打开 WebUI,无需安装 Python、无需配置环境变量、无需额外下载浏览器内核)。
|
||
|
||
---
|
||
|
||
## 📁 项目目录结构
|
||
|
||
```text
|
||
FreePEP/
|
||
├── pep_core.py # 核心底层库(AES 解密、Playwright 爬取、PDF 合成)
|
||
├── webui.py # FastAPI WebUI 服务器与一体化前端界面
|
||
├── cli.py # 交互式与参数化 CLI 终端下载器
|
||
├── download_all.py # 按「学段/年级」层级全量下载脚本(支持断点续传与缓存清理)
|
||
├── build_exe.py # 一键打包发布 Windows EXE 独立便携包脚本
|
||
├── pep_crawler.py # 命令行测试与示例下载脚本
|
||
├── pep_catalog.json # 全量教材元数据本地缓存(自动生成)
|
||
├── requirements.txt # 项目 Python 依赖清单
|
||
├── README.md # 项目使用说明文档
|
||
├── temp_pages/ # 图片下载临时缓存目录(下载后自动清理/保留)
|
||
└── downloads/ # 生成的高清 PDF 默认存放目录
|
||
```
|
||
|
||
---
|
||
|
||
## ❓ 疑难解答 (FAQ)
|
||
|
||
### Q: macOS 用户使用 WebUI 可以在线阅读,但点击下载后显示“任务完成”,而 `downloads` 目录没有任何 PDF 文件?
|
||
**原因分析**:
|
||
* **“在线看”正常**:点击“在线阅读”是由您的本机浏览器直接打开人教社公开阅读页面,不依赖后台 Python 浏览器驱动。
|
||
* **下载没有文件**:后台批量下载切片和过盾需要通过 Playwright 驱动无头 Chromium 浏览器。在 macOS 系统源码运行环境下,如果仅执行了 `pip install -r requirements.txt`,而**漏装了 Playwright 浏览器内核**,后台就会抛出 `Executable doesn't exist` 错误导致下载中断;而任务退出后界面可能误提示完成。
|
||
|
||
**解决方案**:
|
||
在 macOS 终端中激活当前 Python 环境,执行以下命令手动补全安装 Playwright 的 Chromium 内核:
|
||
```bash
|
||
playwright install chromium
|
||
```
|
||
> **排查提示**:如仍有问题,请查看运行 `python webui.py` 的终端控制台窗口,观察是否有详细的异常报错输出(如网络超时或环境异常)。
|
||
|
||
---
|
||
|
||
## ⚠️ 免责声明 (Disclaimer)
|
||
|
||
1. 本项目仅供 Python 爬虫技术交流、逆向工程学习与个人学习研究使用,严禁用于任何商业用途或盈利活动。
|
||
2. 本项目下载的所有教材版权均归**人民教育出版社(PEP)**及相关版权所有方所有。
|
||
3. 使用本项目时请控制请求频率,严禁进行任何可能对官方服务器造成过大负载的行为。请于下载后 24 小时内自行删除,如需长期使用请购买或支持官方正版出版物。
|
||
4. 使用者因违反版权或不当使用造成的一切法律纠纷与责任,均由使用者个人自行承担,与本项目作者无关。
|
||
|
||
---
|
||
|
||
## 📄 开源许可
|
||
|
||
本项目基于 [MIT License](LICENSE) 协议开源。欢迎提交 Issue 与 Pull Request!
|