Apify Storage 与导出:结果该放哪、怎么拿出来
披露:本页含联盟推广链接。你通过本页链接注册 Apify 并付费,我们可能获得佣金——不影响你支付的价格,也不改变我们如实记录的实测数据。 我们如何实测 →
证据口径:本页于 2026-07-30 按 Apify Storage 与 Dataset 官方文档核对。示例只展示安全调用结构,没有使用本站 token,也没有触发新的 run。
多数采集任务完成后,结果会进入默认 Dataset;但 Storage 不只有 Dataset。先按数据形态选存储,能避免把文件硬塞进表格,或把抓取队列误当成最终结果。
三种存储,各做一件事
| 存储 | 适合放什么 | 不适合当什么 |
|---|---|---|
| Dataset | 一行一个对象的结构化结果,例如商家、商品、帖子 | 需要频繁更新单行的关系数据库 |
| Key-value store | JSON、HTML、图片、文本、状态文件等按 key 读取的内容 | 大量需要筛选、分页的表格结果 |
| Request queue | 等待抓取、已处理和需重试的 URL/请求 | 给业务人员直接交付的结果表 |
Dataset 是顺序追加的结果存储。每次 Actor run 通常会有自己的默认 Dataset;跨系统接入时,不要猜 ID,应从 Run 对象的 defaultDatasetId 读取。
路径 A:在 Console 里导出
- 打开本次 Run 的 Output / Dataset。
- 先在 Table 或 JSON 视图抽查字段、空值与重复项。
- 点 Export,按下游选择 CSV、XLSX、JSON 或 JSONL 等格式。
- 把输入条件、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 条;不绑卡,跑完再决定要不要付费。
免费跑我自己的第一批 →