2026 Web Scraping 实战:页面改 class 就归零?用 Bright Data 搭稳定的 Agent 爬虫

前言

之前有个需求要爬取某BOSS直聘的岗位信息, 我在Cursor 里让 Agent 去执行,它兴冲冲写出一堆 CSS 选择器,跑通了。过了一段时间,官方页面改了一个 class,整段 pipeline 直接归零,无力回天。

公开数据明明在那,网站就是不让程序稳定拿,平台一改 DOM,你的 scraper 就废。如果你也在搭 Agent 工作流,我建议搞个稳定的解决方案去爬取数据。想先验证 Agent 爬虫能不能稳定跑?先用一个公开商品页创建 Collector,再测试 run 和 heal,不需要先搭完整的代理池和浏览器基础设施。

开始免费测试:每月 5,000 次免费额度,无需绑定信用卡

一、Agent 会写爬虫,但为什么总上不了生产?

经常用Claude Code的玩家,你有没有发现, 其实它能力上限,很大程度是被终端里装什么工具决定。工具链弱,Agent 就会写慢、写脆、写一堆 workaround。

我过去踩过的坑,基本就四类:

  • 选择器能跑,稳态不能跑:首版 OK,DOM 小改就全废。
  • JS 页面拿到空壳 :Agent 以为抓到了,其实是
  • 代理/验证码链路缺失:一个站点 403,整条任务链中断。
  • 跨会话不可复用:A 同学调通的逻辑,B 同学新会话又从零"猜"。这种重复劳动最折磨人,纯纯浪费时间。

还遇到了一个很频繁的问题,演示环境能跑,生产环境一上量就崩。CAPTCHA 弹出来、IP 被限流、页面 A/B 两套 DOM 随机切换------Agent 写的脚本根本扛不住这些脏活。

之前我们用 Playwright 就想着稳了,但是指纹、403、CAPTCHA 这些问题还照样会出现。

如果搭一套浏览器池 + 代理池 + 自愈逻辑程序,对小团队来说成本也不低。其实我想说不是 Agent 不够聪明,而是让它干了不该它扛的基础设施活。

二、我的分工:Agent 编排,Bright Data 采集

Bright Data 是一个面向 Web 数据采集的基础设施平台;本文重点使用其中的 CLI、采集器和 MCP 能力,把数据采集能力接入 Agent 工作流。

我现在固定两层:

  • Agent :字段定义、清洗规则、失败重试、业务校验。
  • Bright Data CLI :Agent 负责业务逻辑编排,Bright Data 负责数据采集基础设施。通过 Bright Data CLI,Agent 可以调用采集器、运行任务,并在页面变化后执行 heal,从而减少手写选择器和维护底层反爬基础设施的工作。

Bright Data CLI 支持 scraper heal,核心点是:修复时保留同一个 Collector ID,不用每次改版就重建资产。这层分工带来的变化很直观,以前 PR 里全是"补丁式 selector";现在更多在评审"字段语义是否满足业务"。采集场景也要做职责分层------Agent 不该同时当"业务开发者 + 反爬工程师 + 运维"。

立即免费开始:每月 5,000 次免费额度,无需绑定信用卡。

三、三步跑通:登录 → 创建采集器 → 反复调用

Collector 是 Bright Data 里的「采集任务 ID」:你用一句话说清要抓哪些字段,平台生成一条固定采集逻辑,并分配 c_ 开头的编号(如 c_abc123)。之后 Agent 每次抓取只需传这个 ID,不用重写选择器------这就是「可复用」的意思。

1)安装与登录

复制代码
npm install -g @brightdata/cli

验证brightdata/cli是否安装成功

复制代码
bdata --version
复制代码
bdata login

官方文档写明:scraper create / scraper run / scraper heal 都可以在 Claude Code、Cursor、Codex 的内嵌终端直接跑,也支持 npx 免全局。

2)用自然语言创建采集器

示例商品:Apple iPad Air(第 5 代,64GB,Wi-Fi,粉色),ASIN B09V3KXJPB。

复制代码
bdata scraper create https://www.amazon.com/dp/B09V3KXJPB \
  "提取商品标题、现价、原价、评分、评论数、ASIN,输出 JSON" --country us

返回的 Collector ID 形如 c_mswxhw7c11mykts3oo

这个 ID 就是团队资产,不是一次性的脚本文件。

查看https://brightdata.com/cp/scrapers地址,可以看到在My scrapers菜单中看到新生成的记录

3)运行 + 输出 JSON

scraper run 默认就是 JSON 结构,建议加 --pretty 格式化,并用 -o 落盘:

复制代码
bdata scraper run c_mswxhw7c11mykts3oo https://www.amazon.com/dp/B09V3KXJPB \
  --pretty -o result.json

可以看到当前目录生成了result.json文件

输出示例(字段以实际 Collector 为准):

复制代码
[
    {
        "product_title": "Apple iPad Air (5th Generation): with M1 chip, 10.9-inch Liquid Retina Display, 64GB, Wi-Fi 6, 12MP front/12MP Back Camera, Touch ID, All-Day Battery Life -- Pink",
        "current_price": {
            "value": 652.77,
            "currency": "USD",
            "symbol": "$"
        },
        "rating": 4.8,
        "review_count": 13469,
        "asin": "B09V3KXJPB",
        "input": {
            "url": "https://www.amazon.com/dp/B09V3KXJPB"
        }
    }
]

如果还没建好 Collector、只想先拿结构化商品字段,可以直接用 pipelines(默认就是 JSON):

复制代码
bdata pipelines amazon_product https://www.amazon.com/dp/B09V3KXJPB \
  --pretty -o product.json

bdata scrape -f json 返回的是 HTTP 响应包装(status_code + headers + body),不是业务字段 JSON。要结构化商品数据,用 scraper run 或 pipelines amazon_product。

4)接入 MCP:会话里直接调 Collector

如果你已经在用 MCP 工具栈,可以执行:

复制代码
brightdata add mcp

这会把 Bright Data 能力挂到 Agent 可调用的工具里。CLI 负责"稳定调用",MCP 负责"减少手写封装"。以前 Agent 每抓一次都要我提醒命令格式;现在有 registry + MCP 后,会话里直接说"跑 amazon_ipad_air Collector 并校验字段完整性"就行。

跑完以后,我会让 Agent 做一层轻量 QA------字段是否齐全、数值是否合理、空值比例是否异常。

如果你已经完成 Collector 创建,下一步就是把它接进自己的 Agent 工作流。先跑一个真实公开页面,验证字段准确率、改版恢复能力和输出稳定性,再决定是否扩大流量。

开始使用 Bright Data

四、把 Collector ID 写进 Agent 记忆层

这是我后来觉得最值的一步。

把 ID 和规则写进:

  • CLAUDE.md

  • .cursor/rules

  • CODEX.md

    {
    "collector_registry": {
    "amazon_ipad_air": "c_mpohus372o5tmid1jk",
    "product_detail_cn": "c_abc123xyz"
    },
    "agent_rules": [
    "主流程只允许调用 registry 内 Collector",
    "失败先 heal,再决定是否重建",
    "仅采集公开可访问页面,禁止登录态抓取"
    ]
    }

五、对比:三种方式,谁更适合 2026 的 Agent 工程化

路线 首次搭建 抗改版 输出形态 运维成本 适用
Agent 手写爬虫脚本 页面片段/非结构化文本 一次性实验
自建 Agent + 自购代理 可结构化但维护重 很高 有专职爬虫团队
Agent + Bright Data CLI 高(heal 原地修复) 结构化 JSON 低到中 多团队协作、持续迭代

在实际的体验过程中,我觉得Agent 把业务流程编排得再顺,在数据采集时挂掉,下游照样全停。页面改个 class、站点返回 403、验证码突然弹出来------这些都不是改 prompt 能解决的。

所以我认为技术选型时更看重两件事:抗改版可运营

不是 demo 今天能跑就行,而是目标站改版后,不用再去耗费人力去修选择器。否则每个 Agent 项目最后都会变成长期维护工程,人力都耗在补洞上,主线功能反而推不动。

六、我踩过的三个误区

误区 1:让 Agent 直接读 HTML 再"理解字段"

输出不稳定。

误区 2:一失败就重建抓取

这最耗时间。官方 heal 流程的设计就是"原地修复、ID 不变"。能 heal 就先 heal。

误区 3:把采集失败当模型问题

模型再强,输入是空壳也白搭。先稳采集,再调 prompt,ROI 高一个量级。

七、合规与信任:能抓 ≠ 可以乱抓

生产环境必须把合规写进流程,不是写进 PPT。在抓取数据时应该遵循以下原则:

  • 只采公开可访问数据,不绕过登录、不抓受限个人信息。
  • 数据处理遵循 GDPR、CCPA 等法规,项目侧做最小化采集和留存。
  • 优先选有公开安全背书的平台能力。

平台资质只是基础,不等于你的业务自动合规。你还需要自己的告知机制、数据用途说明和法务审查流程。Bright Data 对外也强调服务 20,000+ 客户,并面向公开网页数据采集场景。

FAQ

1)只会 Cursor,不会写复杂爬虫,能上手吗?

能。内嵌终端跑 login + scraper create,Agent 围绕 Collector ID 写业务逻辑即可。

2)为什么 Collector ID 必须写进规则文件?

这是跨会话复用的关键。没有 registry,Agent 每次都会临时手写选择器,稳定性很差。

3)heal 适合什么场景?

当页面发生 selector 漂移、DOM 小幅改版或字段突然变为空时,可以优先尝试 heal,而不是直接删除并重新创建 Collector。

4)能和 MCP 结合吗?

可以。执行 brightdata add mcp 后,Agent 工具栈里会有标准化采集能力(来源:Bright Data CLI commands 文档)。

5)免费额度够先做验证吗?

通常够验证关键链路(准确率、稳定性、恢复能力)。正式流量再评估成本。

总结

2026 年用 Agent做爬虫,拼的不是"会不会写选择器",而是"采集能力能不能被团队长期运营"。如果你还在让 Claude Code 裸跑浏览器,得到的往往是会动的 Demo。

要上生产,就让它站在可靠底座上,我的技术方案很简:Bright Data CLI 跑通 → 固化 Collector ID → Agent 专注编排。也许这不是唯一解,但我目前解决了我们很大的问题,至少不会再被第三方"页面改一个 class"这种问题卡住流程。

准备把 Agent 爬虫从 Demo 推到生产环境?先从一个公开数据采集任务开始:创建 Collector、运行一次、测试 heal,再把 Collector ID 固化到 Agent 的规则文件中。

立即免费开始 :每月 5,000 次免费额度,无需绑定信用卡。

相关推荐
demo007x1 小时前
DSH harness 中的上下文管理探秘
程序员·agent·deepseek
MicrosoftReactor3 小时前
技术速递|GitHub Copilot App 入门指南:管理你的工作
ai·github·copilot·agent
七夜zippoe3 小时前
OpenClaw 边缘部署实战:IoT 场景下的轻量级 Agent 集群与离线自治
agent·集群·lot·轻量级·边缘部署·openclaw
陈皮波比茶4 小时前
Python项目实战-网络机器人(爬虫)
开发语言·网络·爬虫·python·机器人
Flynt5 小时前
DeepSeek终于能看图了:V4 Flash Vision实测,1分钱9张图但有个大坑
agent·ai编程·deepseek
闲猫5 小时前
LangGraph / Capabilities / Stores
python·agent·langgraph
天涯明月19935 小时前
AI Agent应用深度研究报告
人工智能·大模型·agent
tang777895 小时前
Scrapy框架动态IP自动轮换集成配置教程
爬虫·tcp/ip·scrapy·架构·爬虫代理·动态ip
云烟成雨TD5 小时前
LlamaIndex 系列【4】入门案例(阿里云百炼适配)
ai·agent·rag·llamaindex