网页抓取 API 的价格,只有在明确计费单位后才有意义。一次 HTTP 请求、一个抓取任务、一个 credit 和一条可用结果是不同的数量。预算应围绕应用能验收的数据,同时保留实际支付金额这条账。
本文解释 MIYAIP 异步抓取流程及当前 Browser/MCP 的任务启动计次说明。算例中的美元金额、成功数和验收数均为假设,不是当前套餐报价,也不是实测性能;所有算例均不假设退款。
1. 先数清楚单位
单位 | 统计对象 | 为什么不同 |
|---|---|---|
HTTP 请求 | 对某个接口的一次网络调用 | 查询目录和轮询 TaskResult 也会发送 HTTP 请求。 |
抓取任务 | 由 Invoke 创建的任务 | 一个任务结束前可能需要多次状态查询。 |
Credits | 任务消耗的账户额度 | 所选接口和参数值影响消耗。 |
成功任务 | 终态为 success 的任务 | 结果仍可能为空、不完整或与需求无关。 |
可用结果 | 通过业务验收的输出 | 明确按页面、记录还是整项任务统计,并始终使用同一口径。 |
例如,一次 Invoke 后查询五次 TaskResult,会产生六次 HTTP 请求,但只创建一个任务。不要把每任务预估消耗乘以六。当前抓取契约没有公布独立轮询费率,也不能据此声称所有 HTTP 请求都免费;请查看任务消耗和账户记录。
2. 先预估 credits,再核对返回消耗
接口定义包含 CreditCostBase、CreditCostParam 和 CreditCostMultiplier。配置了计费参数及乘数时,控制台按“基础值 + 参数值 × 乘数”预估;否则使用基础值。这里是乘法,不是“基础值 + 1 / 参数”。
预计 credits = CreditCostBase + Params[CreditCostParam] * CreditCostMultiplier
仅作示例:基础值 1 + 参数值 3 * 乘数 1 = 4 credits从当前 ParamSchema 获取真实参数名和允许的值,不要假设所有接口都有页数参数或消耗相同。提交及完成后查看 costCredits。CallLogPage 还提供 requestJson、resultJson、status、errorMessage、totalCostMs 和 refunded。
refunded 布尔值是退款状态记录,不是“所有失败或超时都退款”的公开承诺。只有确认退款金额及账务效果后才扣除退款。任务保留期、退款时点和自动重试计费规则,并未由当前前端契约完整规定。
3. 分开计算额度折算成本与现金支出
对一个价格明确的套餐,折算成本将套餐价格按已消耗 credits 分摊;现金支出是购买套餐真正付出的金额,也包含尚未使用的额度。前者回答这批任务消耗了多少价值,后者回答为完成它实际需要付多少钱。
折算成本 = 套餐价格 * 净消耗 credits / 购买 credits
每条可用结果折算成本 = 折算成本 / 可用结果数
每条可用结果现金成本 = 实际现金支出 / 可用结果数购买 credits 必须大于零。可用结果数为零时,每结果成本未定义,不是零;应报告已经花费的金额,以及没有产出可用数据这一事实。若购买多个套餐,应使用实际购买记录和明确的分摊规则,不要将某一个套餐的费率直接套到所有消耗。
4. 完整算例:未使用的套餐额度不能忽略
假设购买一个 100 美元、10,000 credits 的套餐;提交 2,000 个任务,每个消耗 2 credits,其中 1,800 个状态成功,1,600 个通过内容验收。本例按“一个通过验收的任务等于一条可用结果”统计。这是一组假设数据,不是服务实测。
指标 | 计算 | 示例结果 |
|---|---|---|
消耗额度 | 2,000 × 2 | 4,000 credits |
额度利用率 | 4,000 / 10,000 | 40% |
可用结果率 | 1,600 / 2,000 | 80% |
折算成本 | $100 × 4,000 / 10,000 | $40 |
每可用结果折算成本 | $40 / 1,600 | $0.025 |
每可用结果现金成本 | $100 / 1,600 | $0.0625 |
未使用额度 | 10,000 − 4,000 | 6,000 credits |
0.025 美元的折算成本不是开始这批任务所需支付的金额;你实际支付了 100 美元。若现在停止使用套餐,每条可用结果的现金成本仍是 0.0625 美元。未来使用可能改善利用率,但不能提前算成今天已完成的工作。
5. 每次只改变一个假设
假设场景 | 消耗 credits | 可用结果 | 每结果折算成本 | 每结果现金成本 |
|---|---|---|---|---|
基准:2,000 个任务,每个 2 credits | 4,000 | 1,600 | $0.025 | $0.0625 |
任务不变,仅 800 条结果可用 | 4,000 | 800 | $0.05 | $0.125 |
输出不变,每任务 4 credits | 8,000 | 1,600 | $0.05 | $0.0625 |
没有可用结果 | 4,000 | 0 | 未定义 | 未定义 |
验收通过率下降会同时提高两种每结果成本。消耗额度增加会提高折算成本,但只要已有套餐仍能覆盖,现金支出可以不变。一旦超出套餐,需要计算新增购买支出,而不是沿用原来的现金数字。
6. 重试、并发与清洗是不同的问题
本地等待超时后,先查已有任务,而不是立即再次调用 Invoke。超时并不证明创建失败,也不会取消服务端工作。记录每个 taskId,避免重复任务、重复扣费和重复数据。需要主动重试时,为次数设限并衡量增量成本。
并发表示能同时运行多少个任务,不是折扣,也不是保证吞吐量。耗时受任务、目标站和参数影响。保留 totalCostMs 便于诊断,不要把并发限制换算成承诺的每分钟页数。
Credits 也没有包含应用侧的存储、验证、去重和维护成本。便宜但需要大量清洗的响应,可能比可直接使用的数据更昂贵。只有检查必需字段、时效、重复标识和错误页面后,才应把输出计入可用结果。
7. Browser/MCP 按任务启动计次
MIYAIP 当前 Browser/MCP 说明中,成功启动 browser_start_task 或 browser_run_test 使用一次抓取额度。同一任务内观察、点击、输入、提取、截图和接管操作不额外计次;每个运行任务占一个并发槽位。不要将这个任务启动模型直接替代 Crawler API 的接口及参数预估公式。
AI 客户端完成一个较大的用户需求时,可能创建多个浏览器任务。应统计实际启动次数,而不是自然语言提示词数量或点击次数。MCP 使用专用密钥;REST 抓取示例使用控制台登录 Token。
8. 复现计算
以下 Python 标准库示例仅计算单个套餐。没有可用结果时,单结果成本返回 None;输入非法或消耗超过套餐时会拒绝计算,避免隐藏本应新增的购买支出。
import math
def costs(price, purchased, consumed, usable):
values = (price, purchased, consumed, usable)
if not all(math.isfinite(v) for v in values):
raise ValueError("Use finite numbers")
if price < 0 or purchased <= 0 or consumed < 0 or consumed > purchased or usable < 0:
raise ValueError("Invalid package or result count")
allocated = price * consumed / purchased
return {
"allocated": allocated,
"allocated_per_result": allocated / usable if usable else None,
"cash_per_result": price / usable if usable else None,
}
# Hypothetical single-package example, no assumed refunds.
print(costs(100, 10000, 4000, 1600))
# allocated=40, allocated_per_result=0.025, cash_per_result=0.0625
9. 用自己的样本选套餐
选择允许采集的小批量目标,使用真实所需参数。记录 taskId、credits、状态、通过验收的结果、耗时及已确认退款。按样本估算总任务量,再同时比较套餐支出和折算成本。为不确定性留出预算,但不要虚构通用成功率。
来源
文中 MIYAIP 字段和任务流程依据 2026-09-05 核对的抓取与 MCP 页面实现。价格通过链接提供,不复制成实时承诺;上述数字为明确假设,不声称做过生产抓取性能对照,也不保证退款。
