解析规则交给 AI,是效率提升还是系统隐患?

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文通过严谨的A/B实验,对比人工编写与大模型生成HTML解析规则在真实爬虫场景中的表现。结果显示:大模型虽初筛成功率尚可(92%),但面对页面改版、多地区代理等常见变化时稳定性骤降(失败率升至35%),且易引入静默错误。结论明确:大模型宜作规则“候选生成器”,而非生产环境“唯一决策者”。

在过去一年里,一个越来越常见的声音开始出现在数据圈:

“解析规则这一步,其实可以交给大模型。”

理由听起来很诱人:
HTML 结构复杂、页面频繁改版、人工维护 XPath 成本高,而大模型“看一眼页面就能写规则”。

但工程经验告诉我们一句老话:
凡是感觉“省事”的地方,往往藏着系统性风险。

这篇文章不讨论立场,只做一件事:
用一组可复现的 A/B 实验,对比「人工解析规则」和「大模型生成解析规则」在真实爬虫场景中的表现。

一、实验问题定义

我们要回答的不是“能不能用”,而是三个更工程化的问题:

  1. 在真实页面环境下,大模型生成的解析规则成功率如何?
  2. 当页面出现轻微结构变化时,哪一方更稳定?
  3. 在代理 IP、多地区页面差异下,规则是否会发生漂移?

二、实验场景说明

业务背景

假设我们在做一个内容聚合服务,需要采集资讯类网页的三个字段:

  • 标题
  • 正文
  • 发布时间

页面特点如下:

  • 页面由服务端渲染
  • 存在广告、推荐模块
  • 不同地区访问返回的 HTML 存在细微差异

这是一个非常典型、但并不极端的爬虫场景。

三、A/B 两组方案定义

A 组:人工编写解析规则

特点:

  • 由工程师手动分析 DOM
  • 使用稳定层级 XPath
  • 明确字段边界
  • 可解释、可调试

B 组:大模型生成解析规则

流程:

  1. 抓取完整 HTML
  2. 将 HTML 片段 + 字段描述交给大模型
  3. 由大模型输出 XPath / CSS Selector
  4. 程序直接使用该规则解析

这是目前很多“AI + 爬虫”方案真实采用的模式。

四、实验环境与代理配置

为了避免“本地页面过于干净”的问题,实验中所有请求都通过代理 IP 发起,确保:

  • 页面为真实线上版本
  • 触发地区差异
  • 包含更多不确定性因素

下面是统一使用的请求代码示例。

import requests

proxies = {
   
    "http": "http://用户名:密码@:proxy.16yun.cn:3100",
    "https": "http://用户名:密码@proxy.16yun.cn:3100"
}

headers = {
   
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
}

def fetch_html(url):
    response = requests.get(
        url,
        headers=headers,
        proxies=proxies,
        timeout=10
    )
    response.raise_for_status()
    return response.text

说明:

  • 代理IP使用亿牛云爬虫代理
  • 用户名、密码、域名、端口需替换为实际配置
  • 每次请求随机更换 IP,模拟真实访问

五、解析实现对比

A 组:人工解析代码

from lxml import etree

def parse_by_human(html):
    tree = etree.HTML(html)

    title = tree.xpath("//h1[@class='article-title']/text()")
    content = tree.xpath("//div[@class='article-content']//p/text()")
    publish_time = tree.xpath("//span[@class='publish-time']/text()")

    return {
   
        "title": title[0] if title else None,
        "content": "\n".join(content).strip(),
        "publish_time": publish_time[0] if publish_time else None
    }

特点非常明显:

  • XPath 较长
  • 明确避开广告区域
  • 每一步都可人工验证

B 组:大模型生成解析规则(示意)

假设大模型返回的结果如下:

{
   
  "title": "//h1/text()",
  "content": "//div[contains(@class,'content')]//text()",
  "publish_time": "//time/text()"
}

解析代码如下:

def parse_by_llm(html, rules):
    tree = etree.HTML(html)

    def extract(rule):
        result = tree.xpath(rule)
        return result[0].strip() if result else None

    return {
   
        "title": extract(rules["title"]),
        "content": extract(rules["content"]),
        "publish_time": extract(rules["publish_time"])
    }

从代码角度看,B 组非常“优雅”。

六、实验结果统计

我们对同一批 URL 进行 200 次请求,统计结果如下(文字描述):

  1. 首次成功率
    • A 组:约 97%
    • B 组:约 92%
  2. 页面结构轻微调整后
    • A 组:成功率下降到约 90%
    • B 组:成功率下降到约 65%
  3. 多地区代理访问
    • A 组:字段偶发为空,但结构稳定
    • B 组:正文字段明显掺杂推荐内容、版权信息

七、问题出在哪里

通过失败样本回放,我们发现几个非常关键的现象。

1. 大模型倾向于“语义正确,而非结构正确”

它更容易选择:

  • 最短 XPath
  • 最宽泛的 class 匹配
  • 表面看起来“像正文”的区域

但工程上,最像正文的区域,往往不是最稳定的区域

2. 代理IP放大了规则不稳定性

不同 IP 访问返回的 HTML 中:

  • 广告模块顺序不同
  • 推荐内容位置变化
  • A/B 测试标签不同

人工规则通常会主动规避这些区域,而大模型并不知道哪些是“危险区域”。

3. 错误往往是“静默的”

B 组最危险的一点不是报错,而是:

  • 能解析
  • 有内容
  • 但内容是错的

这类错误如果没有人工抽检,很可能直接进入数据仓库。

八、实验结论

通过这次 A/B 对抗实验,我们得到一个非常清晰的工程结论:

  1. 大模型适合做“解析规则的候选生成器”
  2. 不适合直接成为“生产解析规则的唯一来源”
  3. 关键字段的解析,必须是确定性、可解释的

一句话总结:

大模型可以帮你“想规则”,但不能替你“承担规则失效的后果”。

九、一个更稳妥的落地建议

在真实项目中,更推荐的组合方式是:

  • 大模型负责:
    • 新站点初始规则生成
    • 页面结构分析建议
  • 人工负责:
    • 规则确认
    • 关键字段兜底
  • 系统负责:
    • 失败率监控
    • 代理 IP 场景回放

这不是反对 AI,而是让 AI 放在它最擅长的位置

相关文章
|
6月前
|
PHP 开发工具 Android开发
语音房社交软件开发/php开发/社交同城交友/语音房APP开发与社交功能的融合
本文介绍语音社交应用的两种开发路径:定制开发适合有独特需求的大中型企业,功能灵活但成本高、周期长;基于成熟方案快速搭建则适合初创团队,利用声网、腾讯云等RTC厂商的开源Demo,低成本高效启动。同时探讨如何通过轻互动、用户标签、个人主页、语音动态等功能,将语音房临时互动转化为长期社交关系,并强调合规、性能与MVP冷启动策略的重要性。(238字)
433 3
|
3月前
|
人工智能 运维 监控
让问题不过夜:交易领域“问诊”Agent实践
在日常研发支持中,工程师频繁穿梭于工单、群聊、舆情反馈与问题排查之间:一边解释业务规则与口径,一边追踪链路、查看日志、核对指标、执行补偿。这些工作高度碎片化、重复性强且严重依赖个人经验,导致响应效率低、处理质量不稳定、新人上手困难。 为此,我们围绕“研发支持中的问诊痛点”,构建了一个可持续运营的智能 Agent 系统。通过将一线高频问题抽象为两类核心能力形态(业务答疑与问题诊断),并结合“排查文档技能化 + 质量评分闭环”机制,实现解释与排查工作的前置自动化。该系统不仅“能跑”,更能持续迭代进化,显著缩短首响时间与平均解决时长,提升服务一致性与工程效能。
让问题不过夜:交易领域“问诊”Agent实践
|
SQL 关系型数据库 MySQL
菜鸟之路Day30一一MySQL之DML&DQL
本文介绍了MySQL中DML(数据操作语言)和DQL(数据查询语言)的核心用法。DML主要包括插入(insert)、更新(update)和删除(delete)语句,通过具体示例演示了如何对表数据进行增删改操作。DQL则聚焦于数据查询,涵盖基本查询、条件查询、聚合函数、分组查询、排序查询和分页查询等内容。文章通过丰富的SQL语句实例,帮助读者掌握如何高效查询和操作数据库中的数据,适合初学者学习和实践。
617 12
|
4月前
|
缓存 自然语言处理 搜索推荐
大模型上线前,我们到底该怎么测?一份来自一线的检查清单
本文分享大模型对话功能上线前的实战测试经验,直击“无标准答案、状态无限、结果不可复现、判断主观”四大难点,提炼出覆盖功能、性能、安全、体验的六类测试清单及红黄绿三色上线准入标准,助力同行少踩坑、稳上线。
|
机器学习/深度学习 监控 Linux
ollama+openwebui本地部署deepseek 7b
Ollama是一个开源平台,用于本地部署和管理大型语言模型(LLMs),简化了模型的训练、部署与监控过程,并支持多种机器学习框架。用户可以通过简单的命令行操作完成模型的安装与运行,如下载指定模型并启动交互式会话。对于环境配置,Ollama提供了灵活的环境变量设置,以适应不同的服务器需求。结合Open WebUI,一个自托管且功能丰富的Web界面,用户可以更便捷地管理和使用这些大模型,即使在完全离线的环境中也能顺利操作。此外,通过配置特定环境变量,解决了国内访问限制的问题,例如使用镜像站来替代无法直接访问的服务。
|
测试技术 索引 Python
Python range函数
Python range函数
Python range函数
|
开发工具 C语言
C语言经典题目(23)
C语言经典题目(23)
C语言经典题目(23)
|
存储 IDE 开发工具
手把手教你做一款HID键盘
手把手教你做一款HID键盘
1052 1
手把手教你做一款HID键盘
|
移动开发 安全 网络协议
https(ssl)安全证书配置【H5系统】
https(ssl)安全证书配置【H5系统】
|
网络协议
西门子S7-1200的PROFINET以太网通信
西门子S7-1200 CPU本体上集成了一个PROFINET通信接口,支持以太网和基于TCP/IP的通信标准。通过这个通信接口可以实现S7-1200 CPU与编程设备、CPU与HMI以及CPU与CPU之间的通信。
西门子S7-1200的PROFINET以太网通信

热门文章

最新文章