朋友发来消息的时候,我正对着屏幕发呆。
"能不能帮我做个爬虫?监控几个跨境电商平台的价格和库存。"
换作两年前,我大概会开始盘算用什么框架,要不要上分布式,反爬策略怎么设计。那天我脑子里冒出来的第一个念头是:这玩意儿,能不能直接扔给 LLM?
不是偷懒(好吧,有一部分是)。是隐隐觉得,传统的爬虫思路走到 2025 年,已经有点力不从心了。前端框架生成的 DOM 结构像迷宫,反爬机制越来越聪明,维护一套爬虫脚本的成本比写它还要高。你花三天写好的解析逻辑,对方一个版本更新就能让你重来。
我说,试试用 LLM 来做吧。
核心思路其实不复杂:让 AI 像人一样操作浏览器。MCP(Model Context Protocol)提供的浏览器自动化能力,加上大模型的理解和决策能力,构成一个能"看懂"网页、"操作"网页、"分析"网页的系统。
不是传统爬虫那种精确定位 CSS selector 然后提取文本的路子。是告诉 agent"帮我找到这个页面上所有产品的价格和库存状态",它自己去看、去理解、去提取。页面结构变了也没关系——LLM 理解的是语义,不是 DOM 路径。
听起来很美好。
实际跑起来的第一天,token 账单就让我清醒了。
MCP 的问题在于,每次工具调用都会把完整的上下文传回模型。浏览器截图、HTML 片段、操作日志,全部塞进 context window。一个简单的"打开页面、找到价格、提取数据"的操作,轻松吃掉几万 token。现代电商网站的 HTML——React 渲染出来的、带着几十层嵌套 div 和随机 class 名的 HTML——被原封不动地喂给模型去理解。
用大炮打蚊子,炮弹还特别贵。
换个角度想,这个"贵"买的其实是灵活性。传统爬虫对每个网站都要单独写解析逻辑,改一个 class 名就可能挂掉。LLM 方案消耗大归大,好处是不需要对每个平台写定制代码。说到底,是在烧钱换开发效率和维护成本。
难说划不划算。至少,那个月我没写过一行 XPath。
反爬检测这件事,传统方案的做法越来越像军备竞赛。对方加 device fingerprinting,我们模拟指纹;对方上行为分析,我们模拟人类行为模式;对方部署 CAPTCHA,我们接入打码平台。攻防双方都在同一个维度上卷。
LLM 的介入让这个维度变了。
不是"模拟得更像人类",是 agent 操作的是真实的浏览器。鼠标移动、滚动节奏、点击间隔——这些行为数据不再需要精心伪造,它们本来就是真的。一个 AI agent 在页面上浏览、犹豫、对比,它的行为模式天然具有人类那种"不完美"。
当然不是万能的。有些平台对 WebDriver 属性的检测仍然有效,Headless 模式的痕迹也不是完全消除不了。相比传统方案那种需要专门反反爬模块的做法,LLM agent 在"看起来像真人"这件事上,起点就高了一截。
实际开发过程中,我很快发现了一条更划算的路。
LLM 直接操作浏览器的成本太高了。每打开一个页面、每滚动一次、每提取一段文本,都是一次 API 调用。监控几十个产品、每天跑几轮,token 账单能抵上一顿不错的饭。LLM 从原始 HTML 里提取数据,本来也不是它最擅长的事——结构化输出才是。
思路换了个方向:让 LLM 生成抓取脚本,agent 去执行。
不是"AI 帮我爬",是"AI 帮我写爬虫,再让机器去跑"。LLM 根据目标页面的结构,生成一套完整的 Playwright 脚本——包括请求头伪装、代理轮换、等待策略、异常重试。这些反爬手段写死在代码里,比 agent 在浏览器里随机应变要可靠得多。脚本跑完,返回的是干净的 JSON,不是一团 HTML。
成本一下就下来了。脚本里的逻辑只需要 LLM 写一次,后续执行是纯工程开销。本质上是用一次性的 token 投入,换了长期的低成本运行。
agent 拿到脚本返回的结构化数据之后,事情就好办多了。价格、库存、销量、评价——全部是规整的字段,不存在"把促销标签当成真实价格"这种乌龙。AI 基于历史价格数据和利润率模型,自动筛出值得关注的商品。哪个平台的定价有套利空间、哪个产品最近在悄悄涨价、哪个品类库存吃紧——不需要人工盯盘,结论直接推过来。
这个过程里,AI 的价值不在爬取,在判断。
历史数据越攒越多之后,模型也开始派上用场。时序预测跑在历史价格上,提前预警可能的涨价窗口和清仓节点。异常检测扫一遍全平台数据,标记出偏离正常波动范围的异常定价。这些模型不算复杂——XGBoost 跑回归,prophet 跑时间序列——准确率不够惊艳,但当做辅助信号已经完全够用。
OpenClaw 出来之后,事情又绕回来了。
最开始的思路是让 agent 直接操作浏览器——后来因为成本太高,退回到"LLM 写脚本、agent 执行"的模式。脚本能覆盖大部分场景,但总有意外。页面突然弹了验证码、cookie 过期、接口开始限流——以前遇到这些,你得在脚本里提前写好处理逻辑。换代理是一种,重启浏览器实例再拿个新 cookie 又是一种。要面面俱到,本质上是在穷举所有可能的失败。
OpenClaw 让 agent 重新接手了这部分。不是因为你提前写好了应对方案,是它自己看着办。页面被拦了,自己换节点;session 失效了,自己重新登录。能做到这一步,skill 帮了大忙——每个 skill 携带的上下文更少、目标更精确,不像 MCP 那样把整个浏览器状态塞进 context window。模型本身也越来越聪明,不需要你把每种情况的应对方案都描述一遍。
想一想,这其实是一种回归。路径没变——让 agent 自己操作浏览器——只是走法不一样了。第一次走的时候,token 账单太贵,步子太大。这一次,skill 减了上下文,模型加了判断力,agent 的每一次自主决策都更精准。不再是"烧钱换灵活",更像是"用聪明换灵活"。
这种自主性一旦建立起来,往交易端延伸就是自然而然的事。agent 开始不满足于"监控+分析",价格触发阈值自动下单,竞品调价自动调价。
说实话,写到这一步我有点犹豫。让 AI 自主花钱这件事,理智上知道可控,情感上还是觉得哪里不对。设置了预算上限、人工确认环节、异常熔断机制——该做的安全措施都做了。每次看到 agent 发来"已自动下单"的通知,还是会心跳加速一下。
朋友问我项目进展怎么样。
我说还行,它已经开始自己花钱了。
他说,那挺好的啊。
我说,嗯。
好坏的账还没算清。但至少,这条路越走越像那么回事了。