# 小红书作品自动分页逻辑说明 ## 页数计算逻辑 ### 1. 页数统计变量 在 `get_all_works` 方法中,有两个关键的计数变量: - **`iters`**: 总请求次数(包括失败的请求) - 初始值:0 - 每次循环:`iters += 1` - 最大限制:800 次(`max_iters = 800`) - **`page_count`**: 成功获取到的页数(只统计有作品的页面) - 初始值:0 - 只有当 `notes` 不为空时:`page_count += 1` - 这是**实际成功获取到的页数**,不是总页数 ### 2. 总页数计算 总页数可以通过以下方式计算: ```python 总页数 = ceil(总作品数 / 每页大小) ``` 其中: - **总作品数** (`total`): 从 API 返回的声明总数,可能来自: - `tags` 中的 `special.note_time_desc` 的 `notes_count` - `tags` 中其他 tag 的 `notes_count` 最大值 - `data.total` 或 `data.total_count` - `data.page.total` 或 `data.page.totalCount` - **每页大小** (`api_page_size`): 固定为 20 ### 3. 分页流程 ``` 开始循环 (最多 800 次) ↓ iters += 1 (总请求次数) ↓ 调用 API: fetch_notes_page(cursor) ↓ 检查响应是否成功 ├─ 失败 → 如果是第一次请求,切换到滚动模式 └─ 成功 → 继续 ↓ 检查 notes 是否为空 ├─ 为空 → 停止分页 └─ 不为空 → page_count += 1 (成功页数+1) ↓ 解析作品并去重 ↓ 检查是否获取完所有作品 ├─ 累计作品数 >= 总数 → 停止分页 └─ 继续 → 更新 cursor,继续下一页 ``` ### 4. 分页统计输出 在分页完成后,会输出以下统计信息: ``` 分页统计: 总请求次数={iters}, 成功获取页数={page_count}, 累计作品数={len(works)}, 声明总数={total} ``` 示例: - 总请求次数:20(包括所有请求,即使某些请求返回空) - 成功获取页数:18(只有返回作品的页面才计数) - 累计作品数:360(实际获取到的作品总数) - 声明总数:368(API 声明的总作品数) ### 5. 页数计算示例 假设账号有 368 个作品: ``` 总作品数 = 368 每页大小 = 20 理论总页数 = ceil(368 / 20) = 19 页 实际执行: - 第 1-18 页:每页 20 个作品,共 360 个 - 第 19 页:8 个作品 - page_count = 19(成功获取的页数) - iters = 19(总请求次数,如果都成功的话) ``` ## 日志输出位置 ### Python 服务日志 Python 服务的日志通过 `print(..., flush=True)` 输出到**控制台**(标准输出)。 要查看完整的分页日志,需要: 1. **确保 Python 服务正在运行** ```bash cd server/python python app.py ``` 2. **查看 Python 服务的控制台输出** - 日志会实时输出到运行 Python 服务的终端窗口 - 所有 `print` 语句都会立即输出(因为使用了 `flush=True`) 3. **关键日志标识** - `========== 开始自动分页获取作品 ==========`: 分页开始 - `第 {iters} 次请求 (cursor={cursor})`: 每次请求 - `✅ 第 {page_count} 页获取成功`: 成功获取的页 - `📊 分页统计`: 分页完成后的统计信息 ### Node.js 日志 Node.js 端的日志会输出到: - **控制台**(开发环境) - **日志文件**(生产环境): - `server/logs/combined.log` - 所有日志 - `server/logs/error.log` - 错误日志 ## 调试建议 如果 Python API 返回 0 个作品,可能的原因: 1. **Cookie 格式问题** - 检查 Node.js 传递给 Python 的 Cookie 格式是否正确 - Python 期望 JSON 格式的 Cookie 数组 2. **登录状态失效** - 检查账号的 Cookie 是否过期 - 查看 Python 日志中是否有 "Cookie 已过期" 的错误 3. **API 调用失败** - 查看 Python 日志中的错误信息 - 检查网络连接和 API 响应 4. **页面加载问题** - 检查是否成功访问笔记管理页面 - 查看是否有导航超时的错误 ## 查看日志的方法 ### 方法 1: 直接查看 Python 服务控制台 运行 Python 服务的终端窗口会显示所有日志。 ### 方法 2: 重定向日志到文件 ```bash python app.py > python.log 2>&1 ``` 然后查看 `python.log` 文件。 ### 方法 3: 使用测试脚本 运行测试脚本时,Python 服务的日志会输出到运行 Python 服务的终端窗口: ```bash # 终端 1: 运行 Python 服务 cd server/python python app.py # 终端 2: 运行测试脚本 cd server pnpm exec tsx src/scripts/test-xhs-works-sync.ts 35 ``` Python 服务的日志会在终端 1 中显示。