Files
FacereDataset/CLAUDE.md
2026-04-26 11:54:01 +08:00

62 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md — FacereDataset
项目级 Claude Code 指令。与 `~/.claude/CLAUDE.md` 全局指令合并使用,本文件覆盖冲突项。
## 项目性质
产出用于研究用途,不会再分发
数据集仓库。产出代码 + 元数据 + (通过 LFS 或外链引用的)原始资产。不要把几百 MB 的 Gerber / STEP 直接塞进 git。
## 核心工作流
1. **每次重要动作结束后**:追加一条到 `log.md`(时间倒序,顶部最新),格式:
```
## YYYY-MM-DD HH:MM <一句话概括>
- 做了什么
- 为什么(如果非显然)
- 下一步建议
```
2. **计划有调整时**:更新 `plan.md`,不要新建 `plan_v2.md`。
3. **新增爬虫**:放到 `crawlers/<site>/`,至少包含 `__init__.py` 入口、`README.md`(目标站点调研),遵循 `schemas/project.schema.json`。
4. **数据输出位置**`data/raw/<site>/<date>/` 存原始响应JSON/HTML`data/processed/<site>/` 存清洗后的 jsonl。两者都在 `.gitignore` 里,不入库。
## 爬虫规约
- **速率**:默认 QPS ≤ 1/site并发 ≤ 3。可配置但不得默认贪婪。
- **缓存**:所有 HTTP 响应落盘(`data/raw/...` + `requests-cache` 或 httpx + diskcache重跑不要重新打目标站。
- **UA**:声明为 `FacereDataset/<version> (+<repo-url>; contact:<email>)`,不要伪造浏览器。**例外**:目标站主动封标识 UA、且内容属公开静态资源时允许切 lightpanda/web-access 真浏览器模式,并在 commit message 说明原因。
- **robots.txt**:每个爬虫 **必须** 先查 `robots.txt`;命中 Disallow 的路径直接跳过,不要"绕过"。
- **登录态**:登录后才能访问的内容**在本项目范围内**。使用前提:
- 账号必须是我们合法持有的(本人 / 授权的),**禁止**盗号、共享号、撞库号
- 依然不绕付费墙
- 登录凭据集中管理在云服务器的 `~/.secrets/`(见 `docs/infra.md`**禁止**写进 git / 环境变量明文、日志
- cookie / session 变更时写短笔记到 `docs/secrets.md`(不含值,只含"YYYY-MM-DD 换号 / 重登 oshwhub"这类事件)
- **失败重试**:指数退避 + jitter连续 5xx / 429 超过阈值要停爬、提醒人介入,不要傻重试。
- **断点续跑**state 记到 `data/state/<site>.json`(游标、已处理 ID 集合)。
## 数据 schema
统一以 `schemas/project.schema.json` 为准。每条项目记录至少包含:
`source`, `source_url`, `project_id`, `title`, `description`, `author`, `license`, `created_at`, `updated_at`, `crawled_at`, `tags`, `files[]`(每个文件 `type` / `path` / `size` / `sha256`)。
## 合规红线
- 产出用于研究用途,不会公开,不会再分发
- **登录后的内容在范围内**(须合法账号,见上文"登录态");但**禁止**盗号、共享号、撞库号。
- 不绕过付费墙。
- 遇到站点明确声明"禁止抓取 / 禁止训练"的内容robots.txt、ToS、meta 标签),跳过并记录到 `data/state/<site>_excluded.jsonl`。
- 每条记录**必须**保留 `license` 字段;无法判定的标 `license: "unknown"`。
- 登录凭据管理:只存云服务器 `~/.secrets/`,不入 git、不入日志、不入 metadata.json。
## 约定(项目内部)
- 语言:代码/注释/commit 英文文档README / plan / log中文。
- Python3.11+`uv` 管理依赖,`ruff` 做 lint/format`pytest` 测试。
- 不要为"以防万一"添加抽象或配置项;多爬虫共享需求再抽共用代码。
- commit message 说清楚 **why**,尤其是涉及数据过滤、许可证判定逻辑的改动。
## Claude 行为提醒
- 启动任何爬虫前,先跑 dry-run`--limit 1 --no-write`),确认 schema 和速率正确。
- 一次只推进 `plan.md` 的一个阶段,推进后更新 `log.md`。
- 涉及数据删除(`rm` `data/`)必须先跟用户确认。
- 新发现的反爬/法律坑录入 `docs/pitfalls.md`,不要只放在 log。