跳到主要内容
apiactors

Apify Storage 与导出:结果该放哪、怎么拿出来

披露:本页含联盟推广链接。你通过本页链接注册 Apify 并付费,我们可能获得佣金——不影响你支付的价格,也不改变我们如实记录的实测数据。 我们如何实测 →

证据口径:本页于 2026-07-30 按 Apify StorageDataset 官方文档核对。示例只展示安全调用结构,没有使用本站 token,也没有触发新的 run。

多数采集任务完成后,结果会进入默认 Dataset;但 Storage 不只有 Dataset。先按数据形态选存储,能避免把文件硬塞进表格,或把抓取队列误当成最终结果。

三种存储,各做一件事

存储适合放什么不适合当什么
Dataset一行一个对象的结构化结果,例如商家、商品、帖子需要频繁更新单行的关系数据库
Key-value storeJSON、HTML、图片、文本、状态文件等按 key 读取的内容大量需要筛选、分页的表格结果
Request queue等待抓取、已处理和需重试的 URL/请求给业务人员直接交付的结果表

Dataset 是顺序追加的结果存储。每次 Actor run 通常会有自己的默认 Dataset;跨系统接入时,不要猜 ID,应从 Run 对象的 defaultDatasetId 读取。

路径 A:在 Console 里导出

  1. 打开本次 Run 的 Output / Dataset
  2. 先在 Table 或 JSON 视图抽查字段、空值与重复项。
  3. Export,按下游选择 CSV、XLSX、JSON 或 JSONL 等格式。
  4. 把输入条件、Run ID、Dataset ID 和导出时间一起记录,避免文件脱离来源。

选择建议:

  • 交给运营或直接进表格:CSV / XLSX。
  • 保留嵌套对象和数组:JSON / JSONL。
  • 数据量大、要流式处理:优先 JSONL,不要先装进一个巨大的表格文件。

路径 B:用 API 读取 Dataset

先把 token 放在运行环境的秘密变量里,不要写进代码、聊天、URL 或日志。官方推荐 Authorization header:

curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json&limit=100" \
  -H "Authorization: Bearer $APIFY_TOKEN"

导出 CSV 并只保留需要的列:

curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&fields=name,url,price" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  --output results.csv

fields 用来选择和排序字段,omit 可排除字段。字段缺失、嵌套结构和数组在不同格式中的表现不同,正式接入前必须用真实小样本验证。

导出前的五项检查

问题为什么重要
Dataset 是否属于正确 Run“最后一次运行”可能不是你正在验收的那次
关键字段是否稳定Actor 更新后字段可能更名、变类型或变空
是否需要分页只取第一页会造成无声的数据缺口
是否保留来源和采集时间没有 provenance 的数据难以复核和更新
存储是否需要命名临时与命名存储的保留策略不同,长期流程不能靠默认临时状态

常见失败条件

  • CSV 打开后列错位:嵌套对象或数组不适合直接展平;改用 JSON/JSONL,或先在下游明确展开规则。
  • API 返回空数组:先核对 Dataset ID、Run 状态、访问权限与 offset,不要立即重跑制造重复费用。
  • 自动化拿错一批数据:始终从触发的 Run 读取 defaultDatasetId,不要把一次测试的 Dataset ID 永久写死。
  • 长期任务找不到旧结果:为需要长期保留的存储命名,并定期验证官方当前保留策略。

要把“导出一次”变成稳定管道,下一步是先保存 Task,再用 Schedule 或 n8n 在 run 完成后处理对应 Dataset。

先从一份真实 Dataset 看懂字段,再决定 CSV、JSON 还是 API。

apify/google-search-scraper 按 $0.0045/条计,$5 免费额度约合 1,111 条;不绑卡,跑完再决定要不要付费。

免费跑我自己的第一批 →