| .. | ||
| __pycache__ | ||
| config.py | ||
| example_part_100.json | ||
| example_version_id.json | ||
| OPTIMIZATION_SUMMARY.md | ||
| README.md | ||
| requirements.txt | ||
| scraper.py | ||
| test_hardcoded_values.py | ||
| test_token_config.py | ||
| 抓取流程.md | ||
国家课程资源抓取工具
一个遵循 抓取流程.md 的 Python 爬虫工具,用于从 part_100.json 提取 version_id,获取详细 JSON 信息,提取 PDF 和 m3u8 URL,并下载相关资源。
功能特性
- ✅ 支持本地和远程 part JSON 文件
- ✅ 自动提取版本 ID 和资源信息
- ✅ 支持 PDF 和 m3u8 视频资源下载
- ✅ 智能文件名清理和中文支持
- ✅ 层次化目录结构组织
- ✅ 详细的清单文件记录
- ✅ Token 认证支持
- ✅ 可配置的默认参数
安装依赖
pip install -r requirements.txt
使用方法
基本用法
1. 解析本地 part 文件并打印版本 ID
python3 scraper.py --part-file example_part_100.json --test
2. 从远程 URL 获取 part 文件
python3 scraper.py --part-url "https://example.com/part_100.json" --test
3. 完整下载流程(需要 token)
python3 scraper.py --part-file example_part_100.json --out downloaded --token 'MAC id="...",nonce="...",mac="..."'
4. 使用远程 part 文件并下载
python3 scraper.py --part-url "https://example.com/part_100.json" --out downloaded --token "your-token"
命令行参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--part-file |
本地 part JSON 文件路径 | example_part_100.json |
--part-url |
远程 part JSON 文件 URL | None |
--out |
输出目录 | downloaded |
--token |
X-Nd-Auth header 值 | None |
--list-only |
仅列出资源不下载 | False |
--limit |
处理版本ID数量限制 | 0 (无限制) |
--only-pdf |
仅下载PDF文件 | False |
--test |
仅测试解析不下载 | False |
--flat-structure |
使用扁平目录结构 | False |
配置说明
所有配置参数都在 config.py 文件中集中管理:
# 文件路径配置
DEFAULT_PART_FILE = "example_part_100.json"
DEFAULT_OUTPUT_DIR = "downloaded"
# API 端点配置
DETAIL_BASE_URL = "https://s-file-2.ykt.cbern.com.cn/zxx/ndrv2/national_lesson/resources/details"
# 默认值配置
DEFAULT_MATERIAL_NAME = "未知教材"
DEFAULT_CHAPTER_NAME = "未知章节"
DEFAULT_COURSE_TITLE = "未知课程"
DEFAULT_FILENAME = "unnamed"
# 认证配置
DEFAULT_TOKEN = None # 设置您的默认 token
# 其他配置...
输出结构
层次化目录结构(默认)
downloaded/
├── 教材名称/
│ ├── 章节名称/
│ │ ├── 课程名称_version后6位/
│ │ │ ├── 资源文件.pdf
│ │ │ ├── 资源文件.m3u8
│ │ │ └── manifest.json
│ │ └── ...
│ └── ...
└── manifest_all.json
扁平目录结构(使用 --flat-structure)
downloaded/
├── version_id_1/
│ ├── 资源文件.pdf
│ ├── 资源文件.m3u8
│ └── manifest.json
├── version_id_2/
│ └── ...
└── manifest_all.json
配置文件说明
config.py
包含所有可配置参数,便于集中管理:
- 文件路径和URL配置
- 默认值和限制设置
- 网络超时和块大小
- 认证token配置
清单文件
每个版本目录包含 manifest.json,记录下载详情:
{
"version_id": "xxx",
"resources": [
{
"url": "https://...",
"filename": "文件名.pdf",
"label": "资源标签",
"status": "ok/error"
}
]
}
高级用法
1. 仅列出资源不下载
python3 scraper.py --part-file example_part_100.json --list-only
2. 限制处理数量
python3 scraper.py --part-file example_part_100.json --limit 5
3. 仅下载PDF文件
python3 scraper.py --part-file example_part_100.json --only-pdf
4. 使用自定义配置
修改 config.py 文件中的配置项,然后正常运行程序。
错误处理
- 网络请求失败会自动重试并记录错误
- 文件下载失败会在manifest中标记状态
- 文件名冲突会自动添加序号解决
- 支持请求超时和重试机制
开发说明
项目结构
.
├── scraper.py # 主程序
├── config.py # 配置文件
├── requirements.txt # 依赖文件
├── example_part_100.json # 示例part文件
├── example_version_id.json # 示例版本文件
├── test_hardcoded_values.py # 测试脚本
└── OPTIMIZATION_SUMMARY.md # 优化总结
测试验证
# 运行测试脚本验证配置
python3 test_hardcoded_values.py
# 测试基本功能
python3 scraper.py --test
注意事项
- 确保网络连接正常,特别是访问远程资源时
- 如需认证,请正确配置 token 参数
- 输出目录需要有写入权限
- 大文件下载请确保磁盘空间充足
- 建议使用稳定的网络环境
技术支持
如有问题请参考:
抓取流程.md- 详细的操作流程说明OPTIMIZATION_SUMMARY.md- 代码优化说明- 配置文件中的注释说明
版本历史
- v1.0 - 初始版本,支持基本抓取功能
- v1.1 - 优化硬编码值,增加配置管理
- v1.2 - 增强错误处理和日志记录