3.9 KiB
3.9 KiB
CLAUDE.md — FacereDataset
项目级 Claude Code 指令。与 ~/.claude/CLAUDE.md 全局指令合并使用,本文件覆盖冲突项。
项目性质
产出用于研究用途,不会再分发 数据集仓库。产出代码 + 元数据 + (通过 LFS 或外链引用的)原始资产。不要把几百 MB 的 Gerber / STEP 直接塞进 git。
核心工作流
- 每次重要动作结束后:追加一条到
log.md(时间倒序,顶部最新),格式:## YYYY-MM-DD HH:MM <一句话概括> - 做了什么 - 为什么(如果非显然) - 下一步建议 - 计划有调整时:更新
plan.md,不要新建plan_v2.md。 - 新增爬虫:放到
crawlers/<site>/,至少包含__init__.py入口、README.md(目标站点调研),遵循schemas/project.schema.json。 - 数据输出位置:
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)中文。
- Python:3.11+,
uv管理依赖,ruff做 lint/format,pytest测试。 - 不要为"以防万一"添加抽象或配置项;多爬虫共享需求再抽共用代码。
- commit message 说清楚 why,尤其是涉及数据过滤、许可证判定逻辑的改动。
Claude 行为提醒
- 启动任何爬虫前,先跑 dry-run(
--limit 1 --no-write),确认 schema 和速率正确。 - 一次只推进
plan.md的一个阶段,推进后更新log.md。 - 涉及数据删除(
rmdata/)必须先跟用户确认。 - 新发现的反爬/法律坑录入
docs/pitfalls.md,不要只放在 log。