返回顶部
n

nutrition-provider-r2越南营养数据爬取上传

crawl the Vietnam nutrition provider page-by-page with scrapling-official and upload each raw provider record to Cloudflare R2 after fetch. use for provider-specific ingestion where the canonical data comes from the provider's foods or prepared-dish JSON APIs, records from one page may upload in parallel with stable object keys, and each page must still respect a minimum 60 second crawl-plus-upload window before the next page begins.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.2
安全检测
已通过
250
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

nutrition-provider-r2

Nutrition Provider R2

该技能是围绕 scrapling-official 构建的特定提供者编排封装。

其职责是获取 scrapling-official 抓取的负载,将每个规范页面拆分为独立的提供者记录,并将这些记录上传到 Cloudflare R2。

它不替代 scrapling-official 作为爬虫。

当目标为越南营养门户查询列表之一,且任务为以下内容时使用:

  • - 逐页爬取
  • 以原始形式保存每条提供者记录
  • 在获取每个页面后立即将该页面的记录上传到 Cloudflare R2

不要将提供者记录规范化为自定义营养模式。尽可能保留提供者字段、响应体、分页线索和原始链接负载。

必需技能

该技能依赖 scrapling-official 进行爬取。

  • - 如果 scrapling-official 未安装或未设置,请停止并告知用户先安装和配置该技能。
  • 让 scrapling-official 负责爬取执行、端点发现、渲染模式和获取升级。
  • 完全遵循 scrapling-official 的获取升级策略:从 get 开始,必要时切换到 fetch,仅当早期模式失败或需要防护时才使用 stealthy-fetch。
  • 当 scrapling-official 缺失时,不要回退到其他爬虫或浏览器栈。

工作流程

  1. 1. 读取 {baseDir}/references/source-notes.md 获取默认源 URL、分页线索和停止条件。
  2. 确认 R2 凭证存在:
- R2ACCOUNTID - R2ACCESSKEY_ID - R2SECRETACCESS_KEY - R2_BUCKET
  1. 3. 请求 scrapling-official 检查提供者页面,确定哪个负载实际包含当前请求的规范记录。
  2. 对于此提供者,当 scrapling-official 发现规范 JSON 负载时,优先使用它,而不是外部的 HTML 外壳。
  3. 当前观察到的提供者行为:
- 食物查询页面 gia-tri-dinh-duong-thuc-pham 通过 GET /api/fe/foodNatunal/getPageFoodData 暴露记录 - 预制菜品查询页面 gia-tri-dinh-duong-mon-an 通过 GET /api/fe/tool/getPageFoodData 暴露记录 - 页面加载时观察到的默认参数: - 食物:page=1&pageSize=15&energy=0 - 预制菜品:page=1&pageSize=15 - 观察到的过滤参数: - 食物:name、category、energy - 预制菜品:至少 name、energy,UI 中可见其他过滤器如分组和区域;让 scrapling-official 发现确切的实时请求参数
  1. 6. 将每次页面获取的开始时间视为该页面节奏窗口的开始时间。
  2. 保存 scrapling-official 为该页面获取的原始负载,不规范化项目字段。
  3. 如果 scrapling-official 可以获取规范 JSON 负载,则将 raw.data 视为该页面的提供者记录列表。
  4. 将该页面负载拆分为 data 中每个项目对应的一条记录对象。
  5. 将每条记录对象作为独立的 R2 对象上传。
  6. 同一页面的上传可以并行运行,但每条记录对象必须使用稳定的对象键,以便重新运行时不会创建重复项。
  7. 优先使用提供者稳定的标识符作为键:
- 首先使用 _id - 然后使用 code - 仅当两者都不存在时才使用其他确定性标识符
  1. 13. 优先让辅助工具直接从页面负载拆分和上传记录:
- uv run {baseDir}/scripts/uploadpageto_r2.py --extract-foods --page-index --skip-existing
  1. 14. 辅助工具标志名称 --extract-foods 为兼容性保留,但也可用于预制菜品页面负载,因为两种当前源类型都返回 data 数组。
  2. 如果代理已在辅助工具外部拆分记录,仍可使用 --food-id 一次上传一个项目。
  3. 仅当 scrapling-official 无法直接访问规范负载时,才捕获外部 HTML 页面作为调试备选工件。不要将 HTML 外壳作为主要数据集上传。
  4. 等待当前页面的所有记录上传完成。
  5. 测量页面的总时间:
- 页面获取开始 - 加上记录提取 - 加上所有记录上传
  1. 19. 如果当前页面的总时间少于 60 秒,则在开始下一页之前等待剩余时间。
  2. 让 scrapling-official 处理实际的分页请求。
  3. 使用提供者负载本身来决定何时停止:
- 当规范负载保持非空时继续分页 - 当提供者指示没有更多行时停止 - 如果下一个请求重复已看到的数据则停止
  1. 22. 在当前页面同时满足以下条件之前,绝不开始下一页:
- 完成所有上传 - 满足 60 秒的最小页面窗口

操作规则

  • - 保持提供者数据原样。不要重写字段名称、扁平化结构或推断营养模式。
  • 仅在原始负载之外允许轻量级包装元数据,例如 sourceurl、fetchedat、pageindex、contenttype 和 storage_key。
  • 每条提供者记录上传一个对象,而不是整个页面负载上传一个对象。
  • 在分页结束时自然停止。不要发明更多页面。
  • scrapling-official 负责提取或获取正确的提供者负载。
  • 当 scrapling-official 可以同时访问 JSON API 响应和渲染 HTML 时,优先使用 JSON API 响应。
  • 当 JSON 负载已包含规范行和营养数组时,不要将页面外壳 HTML 存储为主要页面负载。
  • 同一页面的记录上传可以并发。
  • 使用稳定的 R2 对象键,以便重复运行覆盖或跳过同一对象,而不是创建重复项。
  • 在页面 N+1 开始之前,完成当前页面的所有记录上传。
  • 对每个页面强制执行至少 60 秒的爬取加上传窗口,以避免使提供者过载。
  • 如果 scrapling-official 从 XHR 端点获取 JSON,则原样存储该 JSON 主体。
  • 如果为调试目的捕获 HTML,则将其与规范负载分开存储,并且不将其视为规范数据集。
  • 如果页面失败,短暂重试。如果仍然失败,仅当调用者明确要求捕获失败时才上传失败记录。

并发

使用页面顺序爬取和记录级上传并发。

  • - 一次只处理一个页面。
  • 同一页面的记录可以并行上传。
  • 在页面 N 完成所有上传之前,不要开始页面 N+1。
  • 对每个页面强制执行至少 60 秒的最小总持续时间,从获取开始到所有上传完成以及任何所需的剩余等待时间。

R2 设置

必需的环境变量:

  • - R2ACCOUNTID
  • R2ACCESSKEYID
  • R2SECRETACCESSKEY
  • R2_BUCKET

当未传递 --key 时,辅助工具使用的可选环境变量:

  • - R2PREFIX 默认为 raw
  • SOURCENAME 默认为 nutrition-provider
  • RUN_ID 默认为当前 UTC 时间戳,格式为 YYYY-MM-DDTHH-MM-SSZ

当支持两个提供者源时,在同一爬取运行中不要为两者重用相同的存储命名空间。

  • - 对于 gia-tri-dinh-duong-thuc-pham,优先使用 SOURCENAME=viendinhduong-foods
  • 对于 gia-tri-dinh-duong-mon-an,优先使用 SOURCENAME=viendinhduong-dishes
  • 或按爬取作业显式传递 --source-name

推荐输出格式

仅在需要存储可追溯性时,用最少的爬取元数据包装提供者负载:

json
{
source_url: https://viendinhduong.vn/api/fe/foodNatunal/getPageFoodData?page=1&pageSize=15&energy=0,
page_index: 1,
fetched_at: 2026-03-15T10:00:00Z,
content_type: application/json,
raw: {
data: [],
current_page: 1,
per_page: 15,
total: 853
}
}

食物端点当前返回页面级 JSON,包含顶级键 data、currentpage、perpage 和 total。每个食物项目当前包含 id、code、namevi、name_en、category、categoryEn、

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 nutrition-provider-r2-1776086823 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 nutrition-provider-r2-1776086823 技能

通过命令行安装

skillhub install nutrition-provider-r2-1776086823

下载

⬇ 下载 nutrition-provider-r2 v0.1.2(免费)

文件大小: 11.35 KB | 发布时间: 2026-4-15 13:39

v0.1.2 最新 2026-4-15 13:39
Expanded the skill to support both the Vietnam nutrition foods lookup and prepared-dish lookup flows, documented the second canonical API and schema, clarified per-record uploads for both sources, and added guidance to separate R2 namespaces between foods and dishes.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部