既然写代码没出路,我就用强化学习破解了复杂的 DOM。今天下午,一个做电商数据的朋友扔过来一个网址,说这家的商品详情页结构又变了,之前用 BeautifulSoup 写的解析器彻底报废。我打开一看,好家伙,整个页面是用 React 动态渲染的,class 名全是随机哈希,DOM 树深得能藏进一头大象。要在 2020 年,我肯定得花一晚上,一边骂娘一边用 Chrome DevTools 手动扒结构,写一堆脆弱的 XPath 或者 CSS Selector,然后祈祷对方下周别更新。
但现在不一样了。我打开 DeepSeek-R1 的 API 文档,直接把网页的 HTML 源码和我的目标数据描述扔了进去。目标很简单:从这团乱麻里,稳定地提取出商品标题、价格、SKU 属性和主图 URL。我没写一行解析代码,我只是在给 AI 描述“逻辑”:价格通常是一个数字,前面可能有货币符号;SKU 可能藏在某个下拉菜单或者属性列表里;主图往往是最大的那张 img 标签。然后,我启动了强化学习模式。
这个过程不是一次性的查询,而是一个训练循环。AI 最初提出的选择器可能抓错,比如把“累计评价 1000+”也当成价格。我就反馈:“不对,这是评价数,价格应该是整数或带两位小数,并且通常更突出。” AI 调整策略,再次尝试。几个回合下来,它自己“学会”了识别这个网站的价格模式:那是一个被特定父容器包裹的、字体加粗的 span,而且旁边没有“评价”、“销量”这类干扰词。最让我后背发凉的是,它甚至发现了人类容易忽略的细节:价格信息在桌面端和移动端 DOM 结构里用了两套不同的标签,但都遵循“临近购买按钮”这个空间逻辑。它最终生成的解决方案,不是一条 XPath,而是一个包含条件判断和备用路径的提取策略树。
这感觉就像,我不再是一个码农,而成了一个教练。我不再关心怎么用 Python 的 lxml 去遍历节点,我关心的是如何把人类的识别逻辑——那种模糊的、基于经验和上下文的直觉——清晰地“喂”给机器,并让它通过试错自我优化。以前的技术栈焦虑是“我该学 Scrapy 还是 Puppeteer”,现在的焦虑变成了“我该如何设计更有效的反馈信号来训练这个智能体”。
十年前,我 31 岁,为了抓一个网站的数据,可以熬通宵跟反爬虫的 IP 封锁和动态加载斗智斗勇,成就感来自于用更骚的多线程和代理池绕过限制。那种是体力上的硬刚,是代码量的堆砌。五年后,我 36 岁,带着团队做项目,最头疼的是每个初级程序员写出来的解析器都像纸糊的,网站一改版,整个数据流水线就崩,我得不停地救火、打补丁,陷入无尽的维护地狱。那时候的累,是心累,是管理上的消耗。
现在,我 40 岁。当我把那个训练好的提取智能体封装成一个简单的 API 端点,朋友那边调用后返回了完美结构化的 JSON 时,我盯着屏幕,没有当年破解难题后的兴奋,反而是一种深沉的“通了”的平静。代码作为直接生产工具的出路确实窄了,但“逻辑设计”和“训练AI”的赛道才刚刚敞开。我不需要亲自去爬每一棵树,我只需要教会机器识别森林的规律。这种从“死写代码”到“逻辑投喂”的质变,才是 40 岁后真正的技术转型。你过去的那些关于网页结构、数据语义、异常处理的经验,并没有报废,它们只是从“实现层”上升到了“策略层”,变成了训练 AI 的宝贵语料。接下来要啃的,是怎么用 n8n 把这类智能体做成可复用的自动化工作流节点,那才是下一个战场。














