🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

网页解锁器 API:将任何页面转换为 HTML、Markdown 或 PNG

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

08-Jul-2026

TL;DR:

  • Web解锁器将任何URL转换为干净数据,只需一次POST。 将URL发送到 unlocker.webunlocker;返回作为HTML、纯文本、Markdown、截图或提取内容的页面——无需管理浏览器。
  • JavaScript渲染是一个标志,不是单独的产品。 设置 jsRender.enabled: true,页面将在构建响应之前在真实浏览器中渲染,因此客户端内容已经存在。
  • 您选择响应的形状。 response.type 可以是 htmlplaintextmarkdownpngjpegnetworkcontent —— 请求LLMs的Markdown,PNG用于截图,content用于结构化提取。
  • 代理国家是一个字段。 设置 proxy.country 以通过该地区的住宅出口路由请求;区域不匹配是页面渲染不同的常见原因。
  • 两个超时控制每次调用。 30秒的页面加载上限和180秒的全局执行上限——页面加载限制优先。
  • 免费开始。 新的Scrapeless账户包括免费的通用抓取API使用——在app.scrapeless.com注册。

介绍:一个端点,任何页面,您要求的格式

大多数抓取代码将其精力花在数据的周围:启动浏览器,等待JavaScript,处理阻止,然后将HTML解析为可用的内容。Scrapeless通用抓取API将这一切简化为单个HTTP请求。您将URL通过POST请求发送到Web解锁器,响应即为页面——已经渲染,已经是您要求的格式。

本指南将逐步介绍 unlocker.webunlocker 角色的全过程:请求形状、首次 curl、响应信封、Python集成、JavaScript渲染可以返回的七种响应类型,以及如何保持请求的干净。下面的每个请求和响应都是在实时API下捕获的。


您可以使用它做什么

  • 以原始HTML获取页面——通过干净出口进行的简单GET,适合您自己解析标记。
  • 渲染JavaScript重的页面——设置 jsRender.enabled 并读取在客户端运行后才存在的内容。
  • 获取LLM的Markdown——请求 type: markdown 并将结果直接输入到RAG管道或提示中。
  • 捕获截图——请求 type: pngjpeg 并将渲染的视口作为图像获取。
  • 提取结构化内容——请求 type: content 从页面中提取标题、链接、表格、电子邮件、图像和元数据。
  • 观察网络响应——请求 type: network 捕获页面发出的XHR/fetch响应,按URL、状态和方法过滤。
  • 首先驱动页面——在构建响应之前运行 instructions(等待选择器、点击、填写、按键)。

为什么选择Scrapeless通用抓取API

通用抓取API是受管控的网页解锁接口:您发送一个URL,它处理渲染、出口和反检测,并返回干净数据。特别对于此工作流程,它带来了:

  • 云端JavaScript渲染——真实浏览器运行页面,因此单页应用和延迟加载的内容在构建响应之前解析。
  • 195多个国家的住宅代理——通过 proxy.country 路由,确保出口IP信誉良好,并确保地理路由的页面正确服务。
  • 自动挑战处理——reCAPTCHA v2、Cloudflare Turnstile和Cloudflare中断在角色内部处理。
  • 七种响应格式——HTML、纯文本、Markdown、PNG、JPEG、网络捕获和结构化内容均来自同一端点。
  • 单一HTTP契约——没有浏览器生命周期,没有驱动版本;响应就是数据。

app.scrapeless.com的免费计划中获取您的API密钥。


先决条件

  • 一个Scrapeless账户和API密钥——在app.scrapeless.com注册
  • curl用于首次请求,Python 3.10+(或Node.js 18+)用于集成
  • 对HTTP和JSON的基本熟悉

Web解锁器的工作原理

每次调用都是一个针对一个端点的 POST,具有JSON主体 {actor, input, proxy}

请求参数

字段 位置 意义
actor 顶层 unlocker.webunlocker
input.url 输入 要获取的页面
input.method 输入 HTTP方法(默认 GET
input.redirect 输入 跟随重定向(true/false
input.jsRender 输入 { enabled, response, instructions, block } — 渲染选项
proxy.country 代理 ISO国家代码或 ANY

身份验证为 x-api-token 头。响应信封始终为 { "code": 200, "data": ... }

使用curl快速捕获

通过住宅出口以HTML获取页面:

bash Copy
curl -X POST https://api.scrapeless.com/api/v2/unlocker/request \
  -H "x-api-token: ${SCRAPELESS_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
```json
{
  "actor": "unlocker.webunlocker",
  "input": { "url": "https://www.example.com", "method": "GET", "redirect": false },
  "proxy": { "country": "ANY" }
}

响应信封

json Copy
{
  "code": 200,
  "data": "<!doctype html><html>…</html>"
}

code 为 200 意味着请求成功;data 包含了负载——这里是 HTML 文本,其他响应类型为 Markdown 或 base64 图像。


在 Python 中集成 API

从 Python 进行相同的调用,从环境中读取密钥:

python Copy
import os
import requests

API_KEY = os.environ["SCRAPELESS_API_KEY"]

resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    headers={"x-api-token": API_KEY, "Content-Type": "application/json"},
    json={
        "actor": "unlocker.webunlocker",
        "input": {"url": "https://www.example.com", "method": "GET", "redirect": False},
        "proxy": {"country": "ANY"},
    },
    timeout=70,
)

data = resp.json()
if data.get("code") == 200:
    html = data["data"]
    print(len(html), "bytes of HTML")

在免费计划中获取您的 API 密钥:app.scrapeless.com


渲染 JavaScript:七种响应类型

首先在真实浏览器中渲染页面,添加 jsRenderresponse.type 决定返回的内容。请求 Markdown 格式的页面——非常适合供 LLM 使用:

python Copy
payload = {
    "actor": "unlocker.webunlocker",
    "proxy": {"country": "ANY"},
    "input": {
        "url": "https://www.example.com",
        "jsRender": {
            "enabled": True,
            "response": {"type": "markdown"},
        },
    },
}
resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    json=payload,
    headers={"x-api-token": API_KEY, "Content-Type": "application/json"},
    timeout=70,
)
print(resp.json()["data"])
# "# 示例域名\n\n此域名用于文档示例..."

type 字段选择格式:

response.type 返回
html JavaScript 运行后的渲染 HTML
plaintext 可见文本,去除标记
markdown 页面作为 Markdown(适合 LLM)
png / jpeg 屏幕截图作为 base64 字符串
network 捕获的 XHR/fetch 响应,按 urlsstatusmethods 过滤
content 结构化提取——标题、链接、表格、图像、电子邮件、元数据

要获取屏幕截图,请请求 png 并将 base64 的 data 解码为字节:

python Copy
import base64

payload["input"]["jsRender"]["response"] = {"type": "png"}
resp = requests.post(
    "https://api.scrapeless.com/api/v2/unlocker/request",
    json=payload,
    headers={"x-api-token": API_KEY, "Content-Type": "application/json"},
    timeout=70,
)
with open("page.png", "wb") as f:
    f.write(base64.b64decode(resp.json()["data"]))

在捕获前驱动页面

当内容只有在交互后才出现时,传递 instructions——每个都是渲染器在生成响应之前按顺序运行的动词:

json Copy
{
  "actor": "unlocker.webunlocker",
  "input": {
    "url": "https://example.com",
    "jsRender": {
      "enabled": true,
      "instructions": [
        { "waitFor": [".dynamic-content", 30000] },
        { "click": ["#load-more", 1000] },
        { "fill": ["#search-input", "search term"] },
        { "keyboard": ["press", "Enter"] },
        { "evaluate": "window.scrollTo(0, document.body.scrollHeight)" }
      ]
    }
  }
}

您还可以通过使用 jsRender.block.resources 阻止不需要的资源类型来节省带宽(例如 ImageFontMediaStylesheet),在提取层中按 Fetch API 的定义跳过相应的资源类别。


如何避免常见问题

  • 页面上不存在的字段为 null,不是错误。 将每个提取字段视为可选,并防范其缺失,而不是假设它存在。
  • 注意两个超时。 页面加载上限为 30 秒,全球执行上限为 180 秒,每次调用都受到限制,页面加载限制优先——将 waitFor 值保持在该预算内。 HTTP 语义规范 定义了您在目标本身出错时所看到的状态代码。
  • 将国家固定到内容上。 如果页面地理路由,请将 proxy.country 设置为提供您想要版本的区域;如果无所谓,ANY 是可以的。
  • 故意选择响应类型。 当您想要数据时,请请求 markdowncontent,而不是需要解析的 html — 提取无论如何都是在服务器端进行的,解锁器处理的自动化流量模式已在 OWASP 自动化威胁项目 中进行了分类。

结论:以您所需的形式展示页面

Web解锁器将抓取简化为一个决策:哪个URL,以及哪个响应类型。渲染、出口和反检测都在行为者内部处理,因此一个重JavaScript的页面可以通过一次请求变成干净的Markdown或截图。当您需要完整的交互会话时,将其与 Scraping Browser 配对,并了解 住宅与数据中心出口,因为代理信誉决定大多数渲染结果。 Universal Scraping API 文档 涵盖每个字段。


准备好构建您的AI驱动数据管道吗?

加入我们的社区以申请免费计划,并与构建提取管道的开发人员连接:Discord · Telegram

app.scrapeless.com 注册以免费使用 Universal Scraping API,并查看 定价


常见问题

问:Web 解锁器和 Scraping Browser 有什么区别?
Web 解锁器是一个单一的请求/响应端点 — 发送一个 URL,通过一次调用返回页面。Scraping Browser 是一个完整的交互式云浏览器,您可以使用 Puppeteer 或 Playwright 驱动。使用解锁器进行获取和解析;使用浏览器进行多步骤会话。

问:我需要启用 JavaScript 渲染吗?
只有在您需要的内容是客户端渲染时。一个普通的 GET 返回服务器 HTML;添加 jsRender.enabled: true 首先在真实浏览器中运行页面,这对于单页应用和懒加载内容是您所期望的。

问:我应该为 LLM 管道使用哪个响应类型?
markdown — 它将页面作为干净的 Markdown 返回,去除了标记,大多数 RAG 和提示管道需要这个。需要离散字段(标题、链接、表格)而不是散文时,请使用 content

问:我如何获取截图?
response.type 设置为 pngjpegdata 字段会作为 base64 字符串返回,您可以解码为图像字节。

问:我需要代理吗?
出口是内置的。将 proxy.country 设置为通过特定区域的住宅 IP 路由,或设置为 ANY 让服务选择。当页面进行地理路由或挑战数据中心 IP 时,锁定一个国家是重要的。

问:超时时间是多少?
固定的 30 秒页面加载上限和 180 秒的全局执行上限。页面加载限制优先考虑,可以在全局限制之前结束调用,因此请将任何 waitFor 值保持在该预算之内。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录