207 lines
5.1 KiB
Markdown
207 lines
5.1 KiB
Markdown
# 国家课程资源抓取工具
|
||
|
||
一个遵循 `抓取流程.md` 的 Python 爬虫工具,用于从 `part_100.json` 提取 `version_id`,获取详细 JSON 信息,提取 PDF 和 m3u8 URL,并下载相关资源。
|
||
|
||
## 功能特性
|
||
|
||
- ✅ 支持本地和远程 part JSON 文件
|
||
- ✅ 自动提取版本 ID 和资源信息
|
||
- ✅ 支持 PDF 和 m3u8 视频资源下载
|
||
- ✅ 智能文件名清理和中文支持
|
||
- ✅ 层次化目录结构组织
|
||
- ✅ 详细的清单文件记录
|
||
- ✅ Token 认证支持
|
||
- ✅ 可配置的默认参数
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 基本用法
|
||
|
||
#### 1. 解析本地 part 文件并打印版本 ID
|
||
```bash
|
||
python3 scraper.py --part-file example_part_100.json --test
|
||
```
|
||
|
||
#### 2. 从远程 URL 获取 part 文件
|
||
```bash
|
||
python3 scraper.py --part-url "https://example.com/part_100.json" --test
|
||
```
|
||
|
||
#### 3. 完整下载流程(需要 token)
|
||
```bash
|
||
python3 scraper.py --part-file example_part_100.json --out downloaded --token 'MAC id="...",nonce="...",mac="..."'
|
||
```
|
||
|
||
#### 4. 使用远程 part 文件并下载
|
||
```bash
|
||
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` 文件中集中管理:
|
||
|
||
```python
|
||
# 文件路径配置
|
||
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`,记录下载详情:
|
||
```json
|
||
{
|
||
"version_id": "xxx",
|
||
"resources": [
|
||
{
|
||
"url": "https://...",
|
||
"filename": "文件名.pdf",
|
||
"label": "资源标签",
|
||
"status": "ok/error"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 高级用法
|
||
|
||
### 1. 仅列出资源不下载
|
||
```bash
|
||
python3 scraper.py --part-file example_part_100.json --list-only
|
||
```
|
||
|
||
### 2. 限制处理数量
|
||
```bash
|
||
python3 scraper.py --part-file example_part_100.json --limit 5
|
||
```
|
||
|
||
### 3. 仅下载PDF文件
|
||
```bash
|
||
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 # 优化总结
|
||
```
|
||
|
||
### 测试验证
|
||
```bash
|
||
# 运行测试脚本验证配置
|
||
python3 test_hardcoded_values.py
|
||
|
||
# 测试基本功能
|
||
python3 scraper.py --test
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 确保网络连接正常,特别是访问远程资源时
|
||
2. 如需认证,请正确配置 token 参数
|
||
3. 输出目录需要有写入权限
|
||
4. 大文件下载请确保磁盘空间充足
|
||
5. 建议使用稳定的网络环境
|
||
|
||
## 技术支持
|
||
|
||
如有问题请参考:
|
||
- `抓取流程.md` - 详细的操作流程说明
|
||
- `OPTIMIZATION_SUMMARY.md` - 代码优化说明
|
||
- 配置文件中的注释说明
|
||
|
||
## 版本历史
|
||
|
||
- v1.0 - 初始版本,支持基本抓取功能
|
||
- v1.1 - 优化硬编码值,增加配置管理
|
||
- v1.2 - 增强错误处理和日志记录
|