网页解锁器 API:将任何页面转换为 HTML、Markdown 或 PNG
Advanced Data Extraction Specialist
TL;DR:
- Web解锁器将任何URL转换为干净数据,只需一次POST。 将URL发送到
unlocker.webunlocker;返回作为HTML、纯文本、Markdown、截图或提取内容的页面——无需管理浏览器。 - JavaScript渲染是一个标志,不是单独的产品。 设置
jsRender.enabled: true,页面将在构建响应之前在真实浏览器中渲染,因此客户端内容已经存在。 - 您选择响应的形状。
response.type可以是html、plaintext、markdown、png、jpeg、network或content—— 请求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: png或jpeg并将渲染的视口作为图像获取。 - 提取结构化内容——请求
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
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
{
"code": 200,
"data": "<!doctype html><html>…</html>"
}
code 为 200 意味着请求成功;data 包含了负载——这里是 HTML 文本,其他响应类型为 Markdown 或 base64 图像。
在 Python 中集成 API
从 Python 进行相同的调用,从环境中读取密钥:
python
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:七种响应类型
首先在真实浏览器中渲染页面,添加 jsRender。response.type 决定返回的内容。请求 Markdown 格式的页面——非常适合供 LLM 使用:
python
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 响应,按 urls、status、methods 过滤 |
content |
结构化提取——标题、链接、表格、图像、电子邮件、元数据 |
要获取屏幕截图,请请求 png 并将 base64 的 data 解码为字节:
python
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
{
"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 阻止不需要的资源类型来节省带宽(例如 Image、Font、Media、Stylesheet),在提取层中按 Fetch API 的定义跳过相应的资源类别。
如何避免常见问题
- 页面上不存在的字段为 null,不是错误。 将每个提取字段视为可选,并防范其缺失,而不是假设它存在。
- 注意两个超时。 页面加载上限为 30 秒,全球执行上限为 180 秒,每次调用都受到限制,页面加载限制优先——将
waitFor值保持在该预算内。 HTTP 语义规范 定义了您在目标本身出错时所看到的状态代码。 - 将国家固定到内容上。 如果页面地理路由,请将
proxy.country设置为提供您想要版本的区域;如果无所谓,ANY是可以的。 - 故意选择响应类型。 当您想要数据时,请请求
markdown或content,而不是需要解析的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 设置为 png 或 jpeg;data 字段会作为 base64 字符串返回,您可以解码为图像字节。
问:我需要代理吗?
出口是内置的。将 proxy.country 设置为通过特定区域的住宅 IP 路由,或设置为 ANY 让服务选择。当页面进行地理路由或挑战数据中心 IP 时,锁定一个国家是重要的。
问:超时时间是多少?
固定的 30 秒页面加载上限和 180 秒的全局执行上限。页面加载限制优先考虑,可以在全局限制之前结束调用,因此请将任何 waitFor 值保持在该预算之内。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



