# FacereDataset 执行日志 时间倒序,最新在顶部。 --- ## 2026-04-23 19:30 Phase 1 MVP:10 个高质量 oshwhub 项目入库 **Claude 会话**:承接仓库初始化 ### API 调研结论 - 列表 API:`GET https://oshwhub.com/api/project?page=N&pageSize=M&sort=hot`,无鉴权,返回 12493 个项目元数据(含 grade / likes / stars / views / forks) - 详情:`GET https://oshwhub.com/` 是 SSR HTML,嵌入 escaped JSON,含 `license` + `attachments[]`(每个带 name / src / size / md5 / ext / mime / download_count) - 附件 CDN:`https://image.lceda.cn{src}` — 已验证无鉴权直接下载 - EasyEDA 工程源 JSON(`u.lceda.cn`)需登录,v0.1 不抓 - 详细调研见 `docs/sources/oshwhub.md` ### 选 10 个高质量项目 判据:`grade == 4`(平台精品徽章) + `likes ≥ 100` + 应用领域多样(避免同类堆叠)+ 排除 `_copy` 派生仓。 10 个项目覆盖:调试器、加热台、盖革计数器、可调电源、焊台、智能手表、USB 测电流、ZVS 感应加热、AI 开发板、红外热成像。 ### MVP 爬虫 位置:`crawlers/oshwhub/crawler.py` - `list_projects()` — 列表 API 分页 - `pick_top()` — 按 like×3 + star + fork×2 + views/100 + comments×2 + grade×50 排序 - `parse_detail_html()` — 从 SSR HTML 提取 title / license / description / attachments - `crawl_one()` — 每项目产出:`metadata.json` / `description.md` / `cover.*` / `files/*` / `_urls.json` - QPS ≤ 0.5(`SLEEP_BETWEEN = 2.0`),UA 显式声明 `FacereDataset/0.1` ### 抓取与入库 - 10/10 成功,52 个附件,**524 MB** - Gitea LFS(v25.4.3 原生支持)+ 本地 `git-lfs 3.5.1`(用户态二进制装在 `~/.local/bin/`) - `.gitattributes` 规则:`data/raw/**/files/**` 一律走 LFS;元数据(metadata.json / description.md / \_urls.json / cover.\*)走普通 git - 每项目目录结构: ``` data/raw/oshwhub// ├── metadata.json # 按 schemas/project.schema.json ├── description.md ├── cover.{jpg,png,jpeg} ├── _urls.json # 所有原始 URL 清单 └── files/* # 原始附件(LFS) ``` ### 改动汇总 - 新增:`crawlers/oshwhub/{__init__,__main__,crawler}.py`、`schemas/project.schema.json`、`docs/sources/oshwhub.md`、`pyproject.toml` - 修改:`.gitattributes`(缩窄到 `data/raw/**/files/**`)、`.gitignore`(移除 `data/raw/*` 排除) ### 下一步建议给 Charles 1. 验收 10 个项目元数据质量(随机抽 2-3 条对照原站) 2. 决定 Phase 1.4 放量目标(50?500?全量 12493?) 3. Phase 2 准备:GitHub KiCad repo 调研 --- ## 2026-04-23 19:40 fs-web-stream 排查 + schema 自动校验 **Claude 会话**(自主推进) ### fs-web-stream.jlc.com 定性 重新抓 `/CYIIOT/ST_LINK-V2_1` 并看 13 个 `fs-web-stream.jlc.com` 链接的上下文:全部是嘉立创服务侧栏/推广图标(3D 打印、发热片、Ican、EDA 扩展广场、开源硬件平台 badge 等),**与项目本身无关**。`image.lceda.cn/attachments/` 就是项目附件的唯一入口,已确认闭环。`docs/sources/oshwhub.md` 对应章节已更新。 ### scripts/validate.py jsonschema 做两层校验: - 默认:所有 `data/raw/**/metadata.json` 对 `schemas/project.schema.json` 的结构校验 - `--check-files`:另外验证每条 file 的本地 path 存在且 sha256 匹配 **结果**:10/10 项目两项全通过。 ### 新增 - `scripts/validate.py` - `pyproject.toml` 加 `jsonschema>=4.26` ### 还是需要 Charles 决策 - 放量规模(推算:52MB/项目 × 12493 ≈ 650GB 全量,需评估 Gitea LFS 容量) - 是否需要抓 `u.lceda.cn` 的 EasyEDA 源 JSON(需登录,v0.1 跳过) --- ## 2026-04-23 18:50 仓库初始化 & 数据源调研 **Claude 会话**:初始化 完成: - 从 `git.deepknow.site/Facere/FacereDataset` 克隆空仓到 `~/repo/FacereDataset` - 调研立创开源平台(oshwhub.com)初步数据: - `robots.txt` 仅 Disallow `/posts`,其他路径允许 - 存在 `sitemap.xml`(首页 + explore + activities + market 等入口已列出) - 项目详情页路径为 `/detail/`(示例 `f0652fd2ae3e40b8a0ecc8dc773e3512`) - 图片 CDN:`image.lceda.cn/oshwhub/pullImage/...` - 文件下载:`fs-web-stream.jlc.com/fs-web-stream/file-operation/download/` - 页面是 Next.js SPA,首屏 HTML 800KB,但数据加载具体 API 入口需要浏览器 trace(留给 Phase 1.1) - 创建项目骨架: - `README.md` — 项目简介与数据源表 - `CLAUDE.md` — 项目级 Claude 指令(爬虫规约、合规红线、schema 要求) - `plan.md` — 6 阶段建设计划(Phase 0 骨架 → Phase 5 数据清洗 → Phase 6 持续运营) - `log.md` — 本文件 - `.gitignore` — 排除 `data/raw` `data/processed` `data/state` Python 缓存等 - 目录骨架 `crawlers/ schemas/ scripts/ data/{raw,processed,state} docs/{sources,}` - 每个空目录放 `.gitkeep` - 首次提交 & 推送到 `origin main` **下一步建议给 Charles**: 1. 拍板存储方案(本地盘 / Gitea LFS / 外部 OSS)—— 影响 Phase 1.4 放量时机 2. 目标规模(1 万 / 10 万 / 全量) 3. 决定是否保留二进制附件或只存 URL 4. 完成上述 3 项后启动 Phase 1.1(用 `chrome-devtools` MCP 录 oshwhub 的 network trace 定位真实 API)