> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brightdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何使用异步请求批量抓取数据

> 使用异步 /trigger 端点触发批量 Scraper API 任务、监控快照进度并下载结果。适用于所有 Bright Data 抓取器。

使用异步 `/trigger` 端点可在单个任务中抓取超过 20 个 URL、运行发现型采集，或将结果投递到 webhook 或云存储。所有 Bright Data 抓取器的工作流程都相同：触发、轮询、下载，只有 `dataset_id` 不同。

<Tip>
  不确定该用同步还是异步？请阅读[了解同步与异步请求](/cn/products/scrapers/concepts/sync-vs-async)。
</Tip>

## 先决条件

* 拥有有效 API 密钥的 [Bright Data 账户](https://www.bright.cn/cp/start)
* 目标抓取器的 `dataset_id`，见下表
* 熟悉对应抓取器的同步请求流程，例如[发送首个 LinkedIn API 请求](/cn/products/scrapers/linkedin/send-first-request)

## 我应该使用哪个 dataset ID？

每个抓取器都有各自的 `dataset_id`。本页示例使用 LinkedIn 个人资料，请替换为您所抓取平台的 ID。

| 抓取器         | 主要 `dataset_id`         | 端点参考                                                                  |
| :---------- | :---------------------- | :-------------------------------------------------------------------- |
| LinkedIn    | `gd_l1viktl72bvl7bjuj0` | [LinkedIn Scraper API](/cn/products/scrapers/linkedin/introduction)   |
| Instagram   | `gd_l1vikfch901nx3by4`  | [Instagram Scraper API](/cn/products/scrapers/instagram/introduction) |
| TikTok      | `gd_l1villgoiiidt09ci`  | [TikTok Scraper API](/cn/products/scrapers/tiktok/introduction)       |
| Amazon      | `gd_l7q7dkf244hwjntr0`  | [Amazon Scraper API](/cn/products/scrapers/amazon/introduction)       |
| ChatGPT     | `gd_m7aof0k82r803d5bjm` | [ChatGPT Scraper API](/cn/products/scrapers/chatgpt/introduction)     |
| Facebook    | `gd_mf0urb782734ik94dz` | [Facebook Scraper API](/cn/products/scrapers/facebook/introduction)   |
| X (Twitter) | `gd_lwxmeb2u1cniijd7t4` | [X (Twitter) Scraper API](/cn/products/scrapers/twitter/introduction) |
| YouTube     | `gd_lk538t2k2p1k3oos71` | [YouTube Scraper API](/cn/products/scrapers/youtube/introduction)     |
| Reddit      | `gd_lvz8ah06191smkebj4` | [Reddit Scraper API](/cn/products/scrapers/reddit/introduction)       |
| Google      | `gd_m8ebnr0q2qlklc02fz` | [Google Scraper API](/cn/products/scrapers/google/introduction)       |

每个抓取器提供多个端点，例如 Amazon 的商品、评论和卖家分别拥有不同的 ID。完整列表见各平台的介绍页，也可在[抓取器库](/cn/products/scrapers/overview)中浏览全部 ID。

## 步骤 1：触发采集

向 `/trigger` 端点发送 `POST` 请求，带上您的输入 URL：

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST \
    "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_l1viktl72bvl7bjuj0&format=json" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '[
      {"url": "https://www.linkedin.com/in/satyanadella"},
      {"url": "https://www.linkedin.com/in/jeffweiner08"},
      {"url": "https://www.linkedin.com/in/rbranson"},
      {"url": "https://www.linkedin.com/in/sherylsandberg"},
      {"url": "https://www.linkedin.com/in/raboram"}
    ]'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.brightdata.com/datasets/v3/trigger",
      params={
          "dataset_id": "gd_l1viktl72bvl7bjuj0",
          "format": "json",
      },
      headers={
          "Authorization": "Bearer YOUR_API_KEY",
          "Content-Type": "application/json",
      },
      json=[
          {"url": "https://www.linkedin.com/in/satyanadella"},
          {"url": "https://www.linkedin.com/in/jeffweiner08"},
          {"url": "https://www.linkedin.com/in/rbranson"},
          {"url": "https://www.linkedin.com/in/sherylsandberg"},
          {"url": "https://www.linkedin.com/in/raboram"},
      ],
  )

  snapshot = response.json()
  print("Snapshot ID:", snapshot["snapshot_id"])
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_l1viktl72bvl7bjuj0&format=json",
    {
      method: "POST",
      headers: {
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
      },
      body: JSON.stringify([
        { url: "https://www.linkedin.com/in/satyanadella" },
        { url: "https://www.linkedin.com/in/jeffweiner08" },
        { url: "https://www.linkedin.com/in/rbranson" },
        { url: "https://www.linkedin.com/in/sherylsandberg" },
        { url: "https://www.linkedin.com/in/raboram" },
      ]),
    }
  );

  const snapshot = await response.json();
  console.log("Snapshot ID:", snapshot.snapshot_id);
  ```
</CodeGroup>

您应会收到包含 `snapshot_id` 的 `200` 响应：

```json theme={null}
{
  "snapshot_id": "s_m1a2b3c4d5e6f7g8h"
}
```

请保存该 ID，用于查询进度和下载结果。

## 步骤 2：监控进度

轮询快照状态直到显示 `ready`。根据 URL 数量，这需要 30 秒到几分钟不等。

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.brightdata.com/datasets/v3/progress/s_m1a2b3c4d5e6f7g8h" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```python Python theme={null}
  import time

  snapshot_id = "s_m1a2b3c4d5e6f7g8h"

  while True:
      status_response = requests.get(
          f"https://api.brightdata.com/datasets/v3/progress/{snapshot_id}",
          headers={"Authorization": "Bearer YOUR_API_KEY"},
      )
      status = status_response.json().get("status")
      print(f"Status: {status}")

      if status == "ready":
          break
      time.sleep(10)
  ```

  ```javascript Node.js theme={null}
  const snapshotId = "s_m1a2b3c4d5e6f7g8h";

  let status = "collecting";
  while (status !== "ready") {
    const statusResponse = await fetch(
      `https://api.brightdata.com/datasets/v3/progress/${snapshotId}`,
      { headers: { "Authorization": "Bearer YOUR_API_KEY" } }
    );
    const statusData = await statusResponse.json();
    status = statusData.status;
    console.log("Status:", status);

    if (status !== "ready") {
      await new Promise((r) => setTimeout(r, 10000));
    }
  }
  ```
</CodeGroup>

状态值：

| 状态           | 含义        |
| :----------- | :-------- |
| `collecting` | 抓取进行中     |
| `digesting`  | 数据处理中     |
| `ready`      | 结果可供下载    |
| `failed`     | 采集过程中出现错误 |

## 步骤 3：下载结果

当状态为 `ready` 时，下载已抓取的数据：

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.brightdata.com/datasets/v3/snapshot/s_m1a2b3c4d5e6f7g8h?format=json" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -o results.json
  ```

  ```python Python theme={null}
  results_response = requests.get(
      f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}",
      params={"format": "json"},
      headers={"Authorization": "Bearer YOUR_API_KEY"},
  )

  results = results_response.json()
  print(f"Collected {len(results)} records")
  ```

  ```javascript Node.js theme={null}
  const resultsResponse = await fetch(
    `https://api.brightdata.com/datasets/v3/snapshot/${snapshotId}?format=json`,
    { headers: { "Authorization": "Bearer YOUR_API_KEY" } }
  );

  const results = await resultsResponse.json();
  console.log(`Collected ${results.length} records`);
  ```
</CodeGroup>

您已完成批量抓取任务的触发、监控和下载。

## 使用 webhook 跳过轮询

如果不想轮询状态，可添加 `endpoint` 参数以自动接收结果：

```bash theme={null}
curl -X POST \
  "https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_l1viktl72bvl7bjuj0&format=json&endpoint=https://your-server.com/webhook" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{"url": "https://www.linkedin.com/in/satyanadella"}]'
```

完整配置见[将结果投递到 webhook 与云存储](/cn/products/scrapers/scrapers-library/data-delivery)。

## 限制与约束

| 约束           | 数值      |
| :----------- | :------ |
| 最大输入文件大小     | 1 GB    |
| 最大并发任务数      | 5000    |
| Webhook 投递大小 | 最高 1 GB |
| API 下载大小     | 最高 5 GB |

### 限制每个输入的记录数

运行发现型采集时，您可以为每个输入设置返回结果的数量上限。请在控制面板的抓取器配置中设置。

<Frame>
  <img src="https://mintcdn.com/brightdata/8FBihMtdCDBVIPQS/images/scraping-automation/scrapers/overview/limit-per-input-disabled.png?fit=max&auto=format&n=8FBihMtdCDBVIPQS&q=85&s=502515b342a61bb550dab495c753c948" alt="未启用每输入限制" width="1214" height="115" data-path="images/scraping-automation/scrapers/overview/limit-per-input-disabled.png" />
</Frame>

设置为 10 时，每个输入最多返回 10 条记录。

<Frame>
  <img src="https://mintcdn.com/brightdata/8FBihMtdCDBVIPQS/images/scraping-automation/scrapers/overview/limit-per-input-10.png?fit=max&auto=format&n=8FBihMtdCDBVIPQS&q=85&s=85d20ff189703a9421981ff1addd17de" alt="每输入限制设为 10" width="1182" height="272" data-path="images/scraping-automation/scrapers/overview/limit-per-input-10.png" />
</Frame>

## 故障排除

<Accordion title="收到 429 Too Many Requests 错误？">
  您已超出并发请求限制。请减少并行请求数量，或将输入合并为更少、更大的批次。每个批次最多可包含 1 GB 输入数据。
</Accordion>

<Accordion title="快照状态显示 failed？">
  请检查所有输入 URL 对所调用的抓取器是否有效。将 LinkedIn URL 发送到 Amazon 的 `dataset_id` 会失败。可在快照响应或 Bright Data 控制面板的[日志页](https://www.bright.cn/cp/scrapers)中查看错误详情。
</Accordion>

<Accordion title="结果不完整或缺少部分 URL？">
  部分 URL 可能单独失败，而整体任务仍然成功。请检查快照响应中的 `errors` 字段，并在单独的请求中重试失败的 URL。
</Accordion>

## 常见问题

### 一次异步请求可以发送多少个 URL？

异步请求每个任务最多接受 1 GB 输入数据，相当于数万个 URL。仅当 URL 不超过 20 个且希望在同一响应中获得结果时，才使用同步端点。

### 每个平台都需要不同的 dataset ID 吗？

需要。`dataset_id` 查询参数同时决定平台和端点，例如 Amazon 商品与 Amazon 评论。上表列出了各平台的主要 ID，其余 ID 见各平台的介绍页。

### 快照可保留多久？

任务完成后快照可下载 30 天。如需更长的保留期，请将结果投递到 webhook 或云存储。

## 相关内容

* [将结果投递到 webhook 与云存储](/cn/products/scrapers/scrapers-library/data-delivery)
* [了解同步与异步请求](/cn/products/scrapers/concepts/sync-vs-async)
* [各端点错误码](/cn/products/scrapers/scrapers-library/error-list-by-endpoint)
