# Extract endpoint：读取你的 agent 已有的 URL

> Extract endpoint：发送 1 到 20 个你已有的 URL，获取每个页面的正文，以 Markdown 格式返回，每开始一组 3 个页面消耗 1 积分。无需 KYC，加密货币支付。

- URL: https://llmwebsearch.com/zh/docs/extract/
- 最后更新: 2026-10-22
- 发布者: LLMWebSearch (https://llmwebsearch.com)

有时 agent 已经持有链接：用户粘贴了它们、之前的搜索列出了它们，或文档引用了它们。`/extract` 读取这些页面并返回它们的正文，使用与 `/search` 相同的读取器和相同的规则。

**快速回答 — 如何读取我已经拥有 URL 的网页？**

向 `POST https://llmwebsearch.com/api/v1/extract` 发送最多 20 个 URL。**LLMWebSearch** 读取每个公开页面，并以 Markdown 或纯文本返回其正文，每个 URL 附带状态。计费为每开始一组 3 个已读取页面消耗 1 积分，自 2026 年 10 月起，每次搜索积分低至 US$1.20/千次搜索。遵守 robots.txt。无需 KYC；加密货币支付。

## /extract at a glance

| 属性 | 值 |
| --- | --- |
| 方法 | `POST`，带 JSON 请求体 |
| URL | `https://llmwebsearch.com/api/v1/extract` |
| 输入 | `urls`：1 到 20 个 http 或 https 地址 |
| 输出 | 每个 URL 的正文，以 `markdown`（默认）或 `text` 返回 |
| 计费 | 读取你已持有 URL 的页面：每开始一组 3 个返回内容的页面计 1 积分，每次调用最多 20 个 URL；被拒绝或失败的 URL 不计入 |
| robots.txt | 我们的读取器遵守 robots.txt：它会以 LLMWebSearch 表明身份，遵守网站为它或为所有机器人写下的规则，并排除任何它无权读取的页面内容 |
| 网页阅读器 | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## 读取 URL 列表

`POST /api/v1/extract`

并行抓取每个 URL，并按你发送的顺序返回其正文。每个条目有自己的 `content_status`，因此一个被拒绝的页面不会导致整个调用失败。示例读取三个页面；标题和数值仅作说明。

认证：API 密钥放在 `Authorization: Bearer API_KEY` 请求头中。

**请求体**

| 字段 | 类型 | 是否必需 | 描述 |
| --- | --- | --- | --- |
| `urls` | string[] | 是 | 1 到 20 个 http 或 https 地址。私有、本地和云元数据地址会被拒绝。 |
| `format` | string | 否 | `markdown`（默认）或 `text`。 |
| `max_chars` | integer | 否 | 每个页面内容的长度上限，500 到 50,000 个字符。默认 6,000。 |

*示例: three pages, longer content*

```json
{
  "urls": [
    "https://docs.example.com/security/key-rotation",
    "https://blog.example.org/key-rotation-checklist",
    "https://example.com/changelog"
  ],
  "max_chars": 20000
}
```

**响应** `200`

```json
{
  "credits_used": 1,
  "results": [
    {
      "url": "https://docs.example.com/security/key-rotation",
      "title": "Rotating API keys",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key...",
      "word_count": 948
    },
    {
      "url": "https://blog.example.org/key-rotation-checklist",
      "content_status": "blocked_by_robots"
    },
    {
      "url": "https://example.com/changelog",
      "title": "Changelog",
      "content_status": "ok",
      "content": "# Changelog\n\n## 2026-10-20\n\n- New export format...",
      "word_count": 2204
    }
  ]
}
```

*curl*

```bash
curl -s "https://llmwebsearch.com/api/v1/extract" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"], "max_chars": 20000}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://llmwebsearch.com/api/v1/extract",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    json={"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"]},
    timeout=60,
)
for page in resp.json()["results"]:
    print(page["url"], page["content_status"], page.get("word_count", 0))
```

*Node.js*

```javascript
const res = await fetch('https://llmwebsearch.com/api/v1/extract', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ urls: ['https://docs.example.com/security/key-rotation', 'https://example.com/changelog'] }),
});
for (const page of (await res.json()).results) console.log(page.url, page.content_status);
```

## 何时应在搜索中使用 extract 而不是 read？

当 URL 不来自你正在运行的搜索时，使用 extract。用户粘贴了一个链接、文档引用了三个来源，或使用 `read=0` 的首次搜索让模型选择了哪些页面值得完整读取。

当你只想在同一次调用中读取顶部结果时，在 `/search` 内使用 `read`。这是一次请求而不是两次，并且最多 3 个页面包含在搜索的单个积分中。

## extract 调用如何计费？

每开始一组 3 个已读取页面消耗 1 积分。计数使用返回内容的页面：被 robots.txt 或网站拒绝的 URL，或加载失败的 URL，不计入。

| 已读取页面 | 积分 |
|---|---|
| 1 到 3 | 1 |
| 4 到 6 | 2 |
| 7 到 9 | 3 |
| 19 或 20 | 7 |

响应始终在 `credits_used` 中说明总数。没有任何页面能读取的调用不消耗任何费用。

## 响应中的每个条目告诉我什么？

每个条目都会原样重复你发来的 `url`，并返回一个 `content_status`。使用 `ok` 时，你还会拿到页面 `title`、它的主要 `content` 和 `word_count`。否则，状态会说明原因：`blocked_by_robots`、`blocked_by_site_policy`、带站点 `target_status` 的 `target_refused`、`fetch_failed`、`fetch_timeout` 或 `unsupported_content`。

条目保持你 `urls` 列表的顺序，因此你既可以按索引匹配，也可以按 URL 匹配。[response format](https://llmwebsearch.com/zh/docs/response/) 页面描述了每种状态。

## 哪些 URL 会在抓取前被拒绝？

指向私有网络、本机或云元数据服务的地址会被拒绝。这可以防止任何人利用我们的读取器访问内部系统。跳转到此类地址的重定向也会被拒绝，且最多跟随 5 次重定向。

地址必须使用 `http` 或 `https`。如果 `urls` 为空、超过 20 个条目或包含格式错误的地址，调用会返回 `400 invalid_parameter`，且不收费。

## extract 和 search 遵循同样的规则吗？

是的。它使用同一个读取器，并以 `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` 标识自己。在 robots.txt 中设置 Content-Signal: ai-input=no 的网站，其页面内容不会出现在你的结果中。当网站拒绝我们的读取器时，结果会不带内容返回，并附上该网站的状态：我们绝不破解 CAPTCHA、不登录账户，也不绕过封锁或付费墙。

需要登录或位于付费墙后的页面会返回无内容。请让 agent 改用其他来源，或改用你用自己的浏览器会话有权读取的页面。

## Extract endpoint：常见问题

### 它可以读取哪些类型的文件？

它专为网页而建。指向视频、压缩包或其他无可见文本文件的链接会返回 `unsupported_content`，该 URL 不计入费用。

### 同一个 URL 发送两次会被读取两次吗？

每个 URL 只发送一次。如果列表可能包含重复项，请先在本地去重，这样结果就能与你的列表一一对应。

### JavaScript 渲染需要额外付费吗？

不需要。当页面需要浏览器才能显示文本时，会进行渲染，不额外收费。

### extract 能读取我已登录的页面吗？

不能。读取器从不登录账号，也不会发送你的任何 cookie。当网站拒绝我们的读取器时，结果会不带内容返回，并附上该网站的状态：我们绝不破解 CAPTCHA、不登录账户，也不绕过封锁或付费墙。

---

LLMWebSearch: LLMWebSearch 是一款面向 AI 智能体的网页搜索 API，返回排序后的搜索结果，并附带热门页面的 Markdown 格式内容，采用加密货币支付，无需上传证件。预付费积分低至 US$1.20/千次搜索，永不过期。无 KYC——无需证件、无需自拍、无需提交任何文件。加密货币支付。
