Files
FacereDataset/log.md
Zhang Jiahao 5ffa10f256 Phase 1 MVP: crawl 10 high-quality oshwhub projects into LFS
Why:
- Charles 指定:先爬 10 个高质量项目存 Gitea LFS,一个项目一个文件夹,
  保留原文件和 URL。先以小批量验证 schema + LFS 流水线,放量前再拍板
  存储规模。

What:
- crawlers/oshwhub: 列表 API (`/api/project?sort=hot`) + SSR HTML 解析,
  一次性产出 metadata / description / cover / files / _urls
- schemas/project.schema.json: 跨源统一 schema
- docs/sources/oshwhub.md: API 入口 / 字段映射 / 陷阱调研
- pyproject.toml: httpx[http2] 单依赖
- .gitattributes: data/raw/**/files/** 一律走 LFS(规则写窄,避免误伤 schemas/*.json 等)
- .gitignore: 移除 data/raw/* 排除(改走 LFS 入库)

10 个项目覆盖:调试器 / 加热台 / 盖革计数器 / 数控电源 / 焊台 /
智能手表 / USB 测电流 / ZVS 感应加热 / AI 开发板 / 红外热成像。
共 52 附件 ≈ 524 MB 入 LFS,筛选判据 grade=4 & likes>=100 & 多样性。

Known gaps(见 plan.md § Phase 1.4):
- EasyEDA 源 JSON 需登录 (u.lceda.cn),v0.1 跳过
- fs-web-stream.jlc.com 的工程源下载未测
- scripts/validate.py 自动 schema 校验未实现

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 19:34:09 +08:00

4.3 KiB
Raw Blame History

FacereDataset 执行日志

时间倒序,最新在顶部。


2026-04-23 19:30 Phase 1 MVP10 个高质量 oshwhub 项目入库

Claude 会话:承接仓库初始化

API 调研结论

  • 列表 APIGET https://oshwhub.com/api/project?page=N&pageSize=M&sort=hot,无鉴权,返回 12493 个项目元数据(含 grade / likes / stars / views / forks
  • 详情:GET https://oshwhub.com/<path> 是 SSR HTML嵌入 escaped JSONlicense + attachments[](每个带 name / src / size / md5 / ext / mime / download_count
  • 附件 CDNhttps://image.lceda.cn{src} — 已验证无鉴权直接下载
  • EasyEDA 工程源 JSONu.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.5SLEEP_BETWEEN = 2.0UA 显式声明 FacereDataset/0.1

抓取与入库

  • 10/10 成功52 个附件,524 MB
  • Gitea LFSv25.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/<uuid>/
    ├── metadata.json      # 按 schemas/project.schema.json
    ├── description.md
    ├── cover.{jpg,png,jpeg}
    ├── _urls.json         # 所有原始 URL 清单
    └── files/*            # 原始附件LFS
    

改动汇总

  • 新增:crawlers/oshwhub/{__init__,__main__,crawler}.pyschemas/project.schema.jsondocs/sources/oshwhub.mdpyproject.toml
  • 修改:.gitattributes(缩窄到 data/raw/**/files/**)、.gitignore(移除 data/raw/* 排除)

下一步建议给 Charles

  1. 验收 10 个项目元数据质量(随机抽 2-3 条对照原站)
  2. 决定 Phase 1.4 放量目标50500全量 12493
  3. 未解决:fs-web-stream.jlc.com 下载(工程源?)、u.lceda.cn 登录态抓工程 JSON
  4. Phase 2 准备GitHub KiCad repo 调研

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/<uuid>(示例 f0652fd2ae3e40b8a0ecc8dc773e3512
    • 图片 CDNimage.lceda.cn/oshwhub/pullImage/...
    • 文件下载:fs-web-stream.jlc.com/fs-web-stream/file-operation/download/<snowflake-id>
    • 页面是 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