Docs
登录

Crawler 是一个托管队列,您将 URL 推入其中并从中读取结果。三个生命周期步骤 - Setup(配置队列)、Push(将 URL 入队)、Pull(接收结果) - 按顺序在下方介绍。

Setup

在您的 dashboard 中创建一个命名队列。每个 crawler 最多可容纳 10 万个 URL。为每个工作负载创建一个队列 - 它们之间不共享状态。创建时需要选择:

  • 唯一的 名称(由您选择:product-monitornews-feed 等)
  • 投递模式:可以是回调 URL(Crawlbase 将每个结果 POST 到该 webhook)或 Cloud Storage(结果会自动持久化,您可按自己的节奏通过 Storage API 获取)。在创建时一次性选定;两种模式互斥 - 同一个 crawler 不能同时使用两者。
  • token 类型(Normal 或 JavaScript)
  • 并发上限(默认为 20,可应请求提高)
没有按请求的 store 标志

Storage 投递是 crawler 的属性,而不是 push 的属性。如果 crawler 是以 Storage 模式创建的,每个结果都会自动落入 Cloud Storage - 您无需在每次 push 时设置 store=true,而 webhook 模式的 crawler 也无法按请求选择启用。

Push

将 URL 发送到 crawler 的队列。推送会立即返回一个 rid,让您的客户端继续后续工作;实际的爬取在后台按 crawler 配置的并发度进行。传递 callback=true 以让请求进入队列投递,而不是内联运行。

GEThttps://api.crawlbase.com/?token=…&crawler=NAME&callback=true&url=…
curl 'https://api.crawlbase.com/?token=YOUR_TOKEN&crawler=product-monitor&callback=true&url=https%3A%2F%2Fexample.com%2Fp%2F12345'
from crawlbase import CrawlerAPI

api = CrawlerAPI({'token': 'YOUR_TOKEN'})
res = api.push(
    'https://example.com/p/12345',
    {'crawler': 'product-monitor'}
)
print(res['rid'])
const { CrawlerAPI } = require('crawlbase');
const api = new CrawlerAPI({ token: 'YOUR_TOKEN' });

const res = await api.push(
  'https://example.com/p/12345',
  { crawler: 'product-monitor' }
);
console.log(res.rid);

Push 响应很小 - 只是确认 URL 已入队。

{ "rid": "a1B2c3D4e5F6" }
Push 吞吐与队列上限

Push 速率默认上限为每个 token 30 URLs/sec。每个 crawler 的等待队列最多可容纳 10 万个 URL,您所有 crawler 的合计总数上限为 1,000,000;一旦超过此限制,push 将暂停并向您发送邮件 - 清空队列(或 purge),push 将自动恢复。

Pull

已完成的爬取如何送达您。两种通道,在 crawler 创建时选定一次:

Webhook

当 crawler 是以回调 URL 创建时,每次爬取完成的瞬间,Crawlbase 都会将结果 POST 到该 webhook。body 在请求 body 中,元数据在请求 headers 中 - 无需轮询,无需客户端状态。

# POST https://your-app.com/webhook
# Content-Type: text/html  (or application/json if scraper used)
# pc_status: 200
# original_status: 200
# rid: a1B2c3D4e5F6
# url: https://example.com/p/12345

…

您的 webhook 应当:

  • 可从 Crawlbase 服务器公开访问。
  • 接受 POST,并在 200 毫秒内返回 200201204
  • rid 保持幂等:重试时可能发生重复投递。
  • 先确认再处理 - 如果处理时间超过响应窗口,请异步启动工作。

body 的形态遵循您在推送时设置的 format 参数:

format=htmlformat=json
Content-Type: text/plainContent-Type: gzip/json
body 是页面的 HTMLbody 为 JSON:{ pc_status, original_status, rid, url, body }
headers 携带元数据:Original-StatusPC-Statusridurlheaders 携带相同的元数据,这些字段也包含在 body 中

两种形式都以 gzip 压缩Content-Encoding: gzip)到达 - 您的处理程序需要在解析前先解压。例外是 Zapier webhooks,它无法读取 gzip 压缩的 body;Crawlbase 会检测 Zapier 回调 URL 并跳过压缩。

失败的投递也会计费

就计费而言,每次重试都算作一次成功的爬取 - Crawlbase 已经支付了代理 / 浏览器的成本。请保持您的 webhook 可靠;减少额度消耗最便宜的方法是不要丢弃投递,而不是对抗重试策略。

测试。当您第一次接入处理程序,想要查看真实 URL 的确切 payload 结构时,可以在 webhook crawler 旁边再创建一个 Storage 模式的 crawler,并将相同的 URL 推送到两者。通过 RID 从 Cloud Storage 拉取,您就有了一份冻结的参照,可用于与您的 webhook 接收内容进行比对 - 有助于在解压缩 bug 和元数据处理错误影响生产流量之前将其捕获。

监控机器人。Crawlbase 会按计划轮询您的 webhook 以检测中断。如果机器人无法访问您的端点或您停止返回 2xx,crawler 会 自动暂停自身,并在您的端点恢复后继续。该探测是一个常规的 POST,body 为 JSON,可通过 User-Agent 区分:

POST https://your-app.com/webhook
User-Agent: Crawlbase Monitoring Bot 1.0
Content-Type: application/json

{ "monitor": true }

将探测视为无操作并返回 200。不要将其当作爬取结果来处理 - 没有真实的 RID 可供操作。

保护端点。使用随机字符串路径(yourdomain.com/2340JOiow43djoqe21rjosi)在实践中本身就已经是主要保护手段 - 该 URL 不太可能被发现。为了万无一失,再叠加以下一项或多项:

  • 查询字符串 token:?token=…,webhook 在接受 body 之前先校验它。
  • 在推送时通过 callback_headers 发送自定义 header(例如 X-Webhook-Token|s3kret),并在服务器端校验。
  • 拒绝任何不是 POST 的请求。
  • 拒绝任何缺失预期元数据 header(Pc-StatusOriginal-Statusrid)的请求。

我们不建议使用 IP 白名单 - Crawlbase 从许多 IP 推送,且这些 IP 会在不另行通知的情况下轮换。

Cloud Storage

当 crawler 是以 Storage 作为投递模式创建时,每个结果都会自动持久化到 Cloud Storage - 无需按 push 的标志,无需 webhook。您的消费端按自己的节奏通过 Storage API 获取结果。当下游是批处理的、当您无法运行 HTTPS 端点、或者当您想为每个已爬取的页面拥有一个稳定的 URL 时,请使用此模式。

推送方式与 webhook 模式的 crawler 完全相同 - 唯一的区别是结果的去向。一旦某个 URL 爬取完成,按 RID 获取:

# Single fetch by RID
curl 'https://api.crawlbase.com/storage?token=YOUR_TOKEN&rid=a1B2c3D4e5F6'

# Or batch-drain up to 100 RIDs at once with auto_delete=true
# so storage stays small.
curl -X POST 'https://api.crawlbase.com/storage/bulk?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{ "rids": ["RID1","RID2","RID3"], "auto_delete": true }'

要知道结果 何时 就绪,可以针对特定 RID 轮询 Find Job,关注 Stats 中的已入队 / 已完成计数,或者干脆按计划批量调用 /storage/bulk,让「RID not found」告诉您还有哪些尚在等待。

投递模式在创建时设定

两种模式互斥,并在创建 crawler 时绑定。webhook 模式的 crawler 不会写入 Storage;Storage 模式的 crawler 不会触发 webhook。如需切换,请用另一种模式创建新的 crawler,并将推送流量迁移过去。

Management API

一组小型 REST 接口,用于监控和管理您的 crawler - 获取统计、清空队列、暂停 / 恢复、按 RID 查找或删除单个任务。所有 endpoint 都位于 /crawler/<TOKEN>/... 之下,并通过路径中的 token 进行认证(无需 query-string 中的 token)。

Token 在路径中,而非查询字符串

与 Crawling API 不同,这些端点要求 token 出现在 URL 路径中。对于使用 JavaScript token 的 crawler,请在下面每个示例中将 Normal token 替换为您的 JS token。

Stats

您所有 crawler 的汇总信息 - 并发数、队列深度、完成 / 失败计数,以及历史细分。

GEThttps://api.crawlbase.com/crawler/<TOKEN>/stats
# All-time summary
curl 'https://api.crawlbase.com/crawler/YOUR_TOKEN/stats'

# Same, filtered to a date range (YYYY-MM-DD bounds, inclusive)
curl 'https://api.crawlbase.com/crawler/YOUR_TOKEN/stats?history_from=2026-04-01&history_to=2026-04-30'

清空 crawler

立即清空 crawler 的队列 - 所有仍处于待处理状态的 URL 都会被丢弃。可用于从失控的生产者中恢复,或清除您不再希望处理的批次。无法撤销。

POSThttps://api.crawlbase.com/crawler/<TOKEN>/<NAME>/purge
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/purge'
Purge 是即时且彻底的

该 crawler 中所有排队的 URL 都会被丢弃 - 没有软删除或恢复。如果您只需要删除单个 URL,请改用 Delete Job

删除单个任务

通过 RID 从队列中删除一个 URL - 即您推送 URL 时返回的 request ID。

POSThttps://api.crawlbase.com/crawler/<TOKEN>/<NAME>/delete_job
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/delete_job?rid=YOUR_RID'

按 RID 查找任务

查询某个请求的状态。如果仍在等待,则返回 QUEUED 以及入队时的元数据;如果已完成爬取(或从未进入队列),则返回 NOT_QUEUED

GEThttps://api.crawlbase.com/crawler/<TOKEN>/<NAME>/find_by_rid/<RID>
curl 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/find_by_rid/YOUR_RID'
{
  "status": "QUEUED",
  "request_info": {
    "rid": "YOUR_RID",
    "url": "YOUR_URL",
    "retry": 3,
    "created_at": 1600494969.189415
  }
}
{
  "status": "NOT_QUEUED",
  "request_info": {
    "rid": "YOUR_RID"
  }
}

暂停与恢复

让 crawler 停止接收新工作,同时保留其队列。推送的 URL 会继续入队,但 crawler 在您恢复之前不会处理它们。适用于维护窗口期,或当下游系统不健康时进行退避。

# Pause - stops the crawler picking up new work
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/pause'

# Unpause - resumes processing
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/unpause'

参数

crawler
string必填
您 dashboard 中 crawler 的名称。
url
string必填(push)
要入队的 URL。请进行 URL 编码。
callback_headers
string可选
在 webhook 投递中要包含的额外 headers,格式为 name|value|name|value。可用于将 ID 传回您的处理程序。仅适用于 webhook 模式的 crawler - 当 crawler 投递到 Storage 时会被忽略。
queue_timeout
integer(分钟)可选
请求在被 worker 处理之前可以在队列中等待的最长时间。范围 110080(1 分钟到 7 天)。一旦 worker 开始爬取,此计时器不再适用。如果请求在等待中过期,您会收到 HTTP 504pc_status=699 的回调。省略(或设置为 0)则禁用。激进的取值会提高失败率 - 请选择能反映结果对您实际有用时长的值。
所有 Crawling API 参数
可选
可传入 page_waitscrollcountryscraper 等 - 它们会应用到每次爬取。

何时使用 Crawler 与 API

  • Crawler: 当���需要处理超过几百个 URL 时,尤其是跨越较长时间段。队列会处理重试、调度和并发。
  • Direct Crawling API: 当您需要内联获取结果时 - 面向用户请求的页面渲染、AI agent 获取上下文等。