mcpField
B
bright-data-best-practices

bright-data-best-practices

github.com/brightdata开发2681.8k 次安装2 周前更新
代码仓库

关于 bright-data-best-practices

bright-data-best-practices 是 Bright Data 网页数据提取 API 的参考技能,面向需要选择采集方式并集成服务的开发者。内容涵盖网页解锁、搜索结果、平台结构化数据和浏览器自动化。

主要功能

  1. 01提供 CLI 安装与身份验证指引
  2. 02按场景选择 Bright Data API
  3. 03网页抓取与 Markdown 输出
  4. 04提取结构化搜索结果
  5. 05通过浏览器 API 自动化交互

适用场景

  1. 01抓取无需交互的网页内容
  2. 02提取 Google、Bing 等搜索结果
  3. 03采集电商或社交平台结构化数据
  4. 04执行点击、滚动及表单操作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/brightdata/skills --skill bright-data-best-practices

安装后在 Claude Code 中输入/bright-data-best-practices确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
browser-api.md
cli-setup.md
serp-api.md
web-scraper-api.md
web-unlocker.md

详细介绍

CLI 设置参考

Bright Data CLI(bdata)的安装、身份验证和故障排除文档集中在一个权威位置:

→ references/cli-setup.md

在执行任何会调用 bdata 的任务前,请先查阅该文档。

Bright Data API

Bright Data 提供大规模网页数据提取基础设施。四种主要 API 适用于不同的用例,请始终为任务选择最具体的工具。

选择合适的 API

用例API原因
按 URL 抓取任意网页(无需交互)Web Unlocker基于 HTTP,自动绕过机器人检测,成本最低
Google / Bing / Yandex 搜索结果SERP API专用于 SERP 提取,可返回结构化数据
从 Amazon、LinkedIn、Instagram、TikTok 等获取结构化数据Web Scraper API内置抓取器,无需解析
点击、滚动、填写表单、运行 JS、拦截 XHRBrowser API完整的浏览器自动化
Puppeteer / Playwright / Selenium 自动化Browser API通过 CDP/WebDriver 连接
通过原始代理(DC/ISP/Residential/Mobile)路由自己的 HTTP 客户端代理网络当你需要使用自己的请求逻辑直接访问代理,而不是使用托管 API 时,请参阅 proxy.md 技能

身份验证模式(所有 API)

所有 API 使用相同的身份验证模式。以下环境变量适用于直接 REST API 集成;如果使用 bdata CLI,bdata login 会自动处理所有这些内容(请参阅 references/cli-setup.md)。

export BRIGHTDATA_API_KEY="your-api-key"         # From Control Panel > Account Settings
export BRIGHTDATA_UNLOCKER_ZONE="zone-name"       # Web Unlocker zone name
export BRIGHTDATA_SERP_ZONE="serp-zone-name"      # SERP API zone name
export BROWSER_AUTH="brd-customer-ID-zone-NAME:PASSWORD"  # Browser API credentials

Web Unlocker 和 SERP API 的 REST API 身份验证标头:

Authorization: Bearer YOUR_API_KEY

Web Unlocker API

基于 HTTP 的抓取代理。最适合无需浏览器交互的简单页面获取。

端点: POST https://api.brightdata.com/request

import requests

response = requests.post(
    "https://api.brightdata.com/request",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "zone": "YOUR_ZONE_NAME",
        "url": "https://example.com/product/123",
        "format": "raw"
    }
)
html = response.text
关键参数
参数类型说明
zonestringZone 名称(必填)
urlstring目标 URL,需包含 http:// 或 https://(必填)
formatstring"raw"(HTML)或 "json"(结构化封装)(必填)
methodstringHTTP 方法,默认为 "GET"
countrystring用于地理定位的 2 字母 ISO 国家代码(例如 "us"、"de")
data_formatstring转换格式:"markdown" 或 "screenshot"
asyncbooleantrue 表示异步模式
快速示例
# Get markdown (best for LLM input)
response = requests.post(
    "https://api.brightdata.com/request",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"zone": ZONE, "url": url, "format": "raw", "data_format": "markdown"}
)

# Geo-targeted request
json={"zone": ZONE, "url": url, "format": "raw", "country": "de"}

# Screenshot for debugging
json={"zone": ZONE, "url": url, "format": "raw", "data_format": "screenshot"}

# Async for bulk processing
json={"zone": ZONE, "url": url, "format": "raw", "async": True}

重要规则: 绝不能将 Web Unlocker 与 Puppeteer、Playwright、Selenium 或反检测浏览器搭配使用。请改用 Browser API。

完整参考(包括代理接口、特殊标头、异步流程、功能和计费)请参阅 references/web-unlocker.md。


SERP API

用于提取 Google、Bing、Yandex 和 DuckDuckGo 搜索引擎的结构化结果。

端点: POST https://api.brightdata.com/request(与 Web Unlocker 相同)

response = requests.post(
    "https://api.brightdata.com/request",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "zone": "YOUR_SERP_ZONE",
        "url": "https://www.google.com/search?q=python+web+scraping&brd_json=1&gl=us&hl=en",
        "format": "raw"
    }
)
data = response.json()
for result in data.get("organic", []):
    print(result["rank"], result["title"], result["link"])
Google URL 必要参数
参数说明示例
q搜索查询q=python+web+scraping
brd_json解析后的 JSON 输出brd_json=1(数据管道中始终使用)
gl搜索国家/地区gl=us
hl语言hl=en
start分页偏移量start=10(第 2 页),start=20(第 3 页)
tbm搜索类型tbm=nws(新闻)、tbm=isch(图片)、tbm=vid(视频)
brd_mobile设备brd_mobile=1(移动设备)、brd_mobile=ios
brd_browser浏览器brd_browser=chrome
brd_ai_overview触发 AI Overviewbrd_ai_overview=2
uule编码后的地理位置用于精确的位置定位

注意: num 参数自 2025 年 9 月起已弃用。请使用 start 进行分页。

已解析的 JSON 响应结构
{
  "organic": [{"rank": 1, "global_rank": 1, "title": "...", "link": "...", "description": "..."}],
  "paid": [],
  "people_also_ask": [],
  "knowledge_graph": {},
  "related_searches": [],
  "general": {"results_cnt": 1240000000, "query": "..."}
}
Bing 关键参数
参数描述
q搜索查询
setLang语言(建议使用 4 字母格式:en-US)
cc国家代码
first分页(每次递增 10:1、11、21……)
safesearchoff、moderate、strict
brd_mobile设备类型
用于批量 SERP 的异步请求
# Submit
response = requests.post(
    "https://api.brightdata.com/request",
    params={"async": "1"},
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"zone": SERP_ZONE, "url": "https://www.google.com/search?q=test&brd_json=1", "format": "raw"}
)
response_id = response.headers.get("x-response-id")

# Retrieve (retrieve calls are NOT billed)
result = requests.get(
    "https://api.brightdata.com/serp/get_result",
    params={"response_id": response_id},
    headers={"Authorization": f"Bearer {API_KEY}"}
)

**计费:**仅对每 1,000 次成功请求收费。异步检索调用不计费。

完整参考文档(包括 Maps、Trends、Reviews、Lens、Hotels、Flights 参数)请参阅 references/serp-api.md。


Web Scraper API

提供适用于 100 多个平台的预构建抓取工具,用于提取结构化数据。无需编写解析逻辑。

同步端点: POST https://api.brightdata.com/datasets/v3/scrape 异步端点: POST https://api.brightdata.com/datasets/v3/trigger

# Sync (up to 20 URLs, returns immediately)
response = requests.post(
    "https://api.brightdata.com/datasets/v3/scrape",
    params={"dataset_id": "YOUR_DATASET_ID", "format": "json"},
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"input": [{"url": "https://www.amazon.com/dp/B09X7M8TBQ"}]}
)

if response.status_code == 200:
    data = response.json()  # Results ready
elif response.status_code == 202:
    snapshot_id = response.json()["snapshot_id"]  # Poll for completion
参数
参数类型描述
dataset_idstringScraper Library 中的抓取工具标识符(必填)
formatstringjson(默认)、ndjson、jsonl、csv
custom_output_fieldsstring以竖线分隔的字段:url|title|price
include_errorsboolean在结果中包含错误信息
请求正文
{
  "input": [
    { "url": "https://www.amazon.com/dp/B09X7M8TBQ" },
    { "url": "https://www.amazon.com/dp/B0B7CTCPKN" }
  ]
}
轮询异步结果
import time

# Trigger
snapshot_id = requests.post(
    "https://api.brightdata.com/datasets/v3/trigger",
    params={"dataset_id": DATASET_ID, "format": "json"},
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"input": [{"url": u} for u in urls]}
).json()["snapshot_id"]

# Poll
while True:
    status = requests.get(
        f"https://api.brightdata.com/datasets/v3/progress/{snapshot_id}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    ).json()["status"]

    if status == "ready": break
    if status == "failed": raise Exception("Job failed")
    time.sleep(10)

# Download
data = requests.get(
    f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}",
    params={"format": "json"},
    headers={"Authorization": f"Bearer {API_KEY}"}
).json()

进度状态值: starting → running → ready | failed **数据保留期限:**30 天。 **计费:**按交付的记录计费。无效且抓取失败的输入 URL 仍会计费。

完整参考文档(包括抓取工具类型、输出格式、交付选项和计费详情)请参阅 references/web-scraper-api.md。


Browser API(Scraping Browser)

通过 CDP/WebDriver 实现完整的浏览器自动化。自动处理 CAPTCHA、指纹识别和反机器人检测。

连接方式:

  • Playwright/Puppeteer:wss://${AUTH}@brd.superproxy.io:9222
  • Selenium:https://${AUTH}@brd.superproxy.io:9515
const { chromium } = require("playwright-core");

const AUTH = process.env.BROWSER_AUTH;
const browser = await chromium.connectOverCDP(`wss://${AUTH}@brd.superproxy.io:9222`);
const page = await browser.newPage();
page.setDefaultNavigationTimeout(120000); // Always set to 2 minutes

await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
const html = await page.content();
await browser.close();
from playwright.async_api import async_playwright

async with async_playwright() as p:
    browser = await p.chromium.connect_over_cdp(f"wss://{AUTH}@brd.superproxy.io:9222")
    page = await browser.new_page()
    page.set_default_navigation_timeout(120000)
    await page.goto("https://example.com", wait_until="domcontentloaded")
    html = await page.content()
    await browser.close()
自定义 CDP 函数
函数用途
Captcha.solve手动触发 CAPTCHA 求解
Captcha.setAutoSolve启用/禁用 CAPTCHA 自动求解
Proxy.setLocation设置精确地理位置(在调用 goto 之前调用)
Proxy.useSession在多个会话中保持相同 IP
Emulation.setDevice应用设备配置文件(iPhone 14 等)
Emulation.getSupportedDevices列出可用的设备配置文件
Unblocker.enableAdBlock屏蔽广告以节省带宽
Unblocker.disableAdBlock重新启用广告
Input.type快速输入文本,适用于批量填写表单
Browser.addCertificate为会话安装客户端 SSL 证书
Page.inspect获取实时会话的 DevTools 调试 URL
// CDP session pattern for custom functions
const client = await page.target().createCDPSession();

// CAPTCHA solve with timeout
const result = await client.send("Captcha.solve", { timeout: 30000 });

// Precise geo location (must be before goto)
await client.send("Proxy.setLocation", {
  latitude: 37.7749,
  longitude: -122.4194,
  distance: 10,
  strict: true
});

// Block unnecessary resources
await client.send("Network.setBlockedURLs", { urls: ["*google-analytics*", "*.ads.*"] });

// Device emulation
await client.send("Emulation.setDevice", { deviceName: "iPhone 14" });
会话规则
  • 每个会话仅允许一次初始导航 — 新 URL = 新会话
  • **空闲超时:**5 分钟
  • **最长持续时间:**30 分钟
地理位置
  • 国家级:在凭据用户名后追加 -country-us
  • 欧盟范围:追加 -country-eu(通过 29 个以上欧洲国家路由)
  • 精确位置:使用 Proxy.setLocation CDP 命令(在导航之前)
错误代码
代码问题解决方法
407端口错误Playwright/Puppeteer → 9222,Selenium → 9515
403身份验证错误检查凭据格式和区域类型
503服务扩容中等待 1 分钟后重新连接

**计费:**仅按流量计费。屏蔽图片、CSS 和字体以降低成本。

完整参考文档(包括所有 CDP 函数、带宽优化、CAPTCHA 模式和调试)请参阅 references/browser-api.md。


详细参考资料

  • references/web-unlocker.md — Web Unlocker:完整参数列表、代理接口、特殊标头、异步流程、功能、计费、反模式
  • references/serp-api.md — SERP API:所有 Google 参数(Maps、Trends、Reviews、Lens、Hotels、Flights)、Bing 参数、解析后的 JSON 结构、异步处理、计费
  • references/web-scraper-api.md — Web Scraper API:同步与异步、所有参数、轮询、抓取器类型、输出格式、计费
  • references/browser-api.md — Browser API:连接字符串、会话规则、所有 CDP 函数、地理定位、带宽优化、CAPTCHA、调试、错误代码

相关技能

  • brightdata-proxy — 使用你自己的 HTTP 客户端,而不是托管 API,通过 Bright Data 的原始代理网络(Datacenter、ISP、Residential、Mobile)路由请求。涵盖网络/IP 池选择、brd-customer-... 用户名格式、定向和粘性会话参数、Residential/Mobile 的 SSL CA 设置,以及 cURL、Python(requests/httpx/aiohttp/Scrapy)、Node(fetch/axios)、Playwright、Puppeteer 和 Selenium 集成。当任务需要访问原始代理,而非使用 Web Unlocker / SERP / Web Scraper / Browser API 时,请转交给它。代理持续遭到拦截时的升级顺序:原始代理 → Web Unlocker → Browser API → Web Scraper API。

评论

支持 Markdown