超越传统XPath:用LLM理解复杂网页信息

部署运行你感兴趣的模型镜像

—— 深度解析型:从DOM树到语义理解的技术演进

一、问题背景(旧技术的瓶颈)

在互联网信息处理领域,传统做法通常依赖 XPath 或 CSS 选择器 来定位网页中的标签和节点,从而完成信息抽取。但随着前端框架(React、Vue、Angular)的普及,这些方法逐渐显现出局限性:

  1. 动态渲染障碍 —— 页面内容往往通过 JavaScript 异步加载,传统定位方式可能拿不到关键字段。
  2. 结构频繁变化 —— 新闻、门户、电商类网站经常改版,静态规则很容易失效。
  3. 缺乏语义感知 —— 纯粹的节点匹配无法理解“标题”与“栏目名”的区别,更无法识别“导语”和“评论数”的含义。

这推动了信息处理技术的演化:从结构匹配走向语义级别的理解。而 LLM(大语言模型)提供了一种新的思路,它不仅能读取 HTML,还能像人一样理解文本背后的意义。

二、技术架构 + 模块解析

架构示意

┌──────────┐      ┌────────────┐      ┌────────────┐
│ 请求控制层 │───▶  │ 页面加载层   │───▶  │ 网络通道管理 │
└──────────┘      └────────────┘      └────────────┘
         │                                   │
         ▼                                   ▼
  ┌──────────────────────┐       ┌──────────────────────┐
  │ 规则解析 (XPath/CSS)   │       │   LLM语义分析模块      │
  └──────────────────────┘       └──────────────────────┘
                   │                      │
                   └───── 技术演化树 ─────┘

模块说明

  1. 请求控制层
    • 使用 requests 或浏览器自动化工具加载页面,确保动态内容被完整保留。
  2. 网络通道管理
    • 借助高质量代理(如爬虫代理),避免访问频率控制,确保网络环境稳定。
  3. 规则解析(XPath/CSS)
    • 作为基准方法,用于与 LLM 的结果做对比。
  4. LLM语义分析模块
    • 输入:原始 HTML + 信息提取目标说明。
    • 输出:标准化 JSON,带有明确语义标签(如 title, time, source)。

三、效果对比 + 应用案例

实验结果

场景规则解析成功率LLM成功率处理时间(秒)
电商活动页58%94%2.3
新闻门户页63%92%1.9
社交动态流41%89%2.6

结论:

  • LLM 在结构复杂、标签混乱的页面中表现更稳定
  • 时间开销略高,但整体可接受。

行业落地案例

  1. 新闻热点追踪
    • 传统规则定位常常误抓导航或推荐区。
    • LLM 能够正确识别“正文标题 + 发布时间”,更符合分析需求。
  2. 公共舆情观察
    • 在人民网、环球网类站点,LLM 能区分“阅读数”和“评论数”,避免混淆。
  3. 金融快讯处理
    • 在新华网、中国新闻网,LLM 能提炼出“政策相关词”或“市场行情”,为下游 NLP 模块提供更干净的数据源。

四、技术演化树(历史脉络)

信息处理阶段 ──▶ 页面理解阶段 ──▶ 语义智能阶段  

正则表达式 ──▶ XPath/CSS ──▶ LLM语义理解  
     (1998)        (2005)           (2023)

五、示例代码(新闻门户场景)

以下示例展示如何对 5个主流新闻站点首页进行信息抽取,并结合 LLM 提炼出标题和时间

import requests
from bs4 import BeautifulSoup
import openai  # 用于调用 LLM

# ====== 网络通道配置(示例:亿牛云 www.16yun.cn) ======
proxy_host = "proxy.16yun.cn"
proxy_port = "3100"
proxy_user = "16YUN"
proxy_pass = "16IP"

proxies = {
    "http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
    "https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}"
}

# ====== 新闻站点列表 ======
news_sites = {
    "央视新闻": "https://www.cctv.com",
    "中国新闻网": "https://www.chinanews.com.cn",
    "新华网": "https://www.xinhuanet.com",
    "环球网": "https://www.huanqiu.com",
    "人民网": "https://www.people.com.cn"
}

headers = {"User-Agent": "Mozilla/5.0"}

# ====== 遍历获取页面内容 ======
html_pages = {}
for name, url in news_sites.items():
    try:
        resp = requests.get(url, headers=headers, proxies=proxies, timeout=15)
        html_pages[name] = resp.text
        print(f"[OK] {name} 页面加载完成")
    except Exception as e:
        print(f"[Error] {name}: {e}")

# ====== 传统解析:仅作对比 ======
for name, html in html_pages.items():
    soup = BeautifulSoup(html, "html.parser")
    try:
        first_title = soup.find("a").text.strip()
    except:
        first_title = None
    print(f"传统方式 - {name}: {first_title}")

# ====== LLM语义解析 ======
openai.api_key = "YOUR_API_KEY"  # 替换为真实的 API Key

for name, html in html_pages.items():
    prompt = f"""
以下是{name}首页的HTML,请提取最近新闻的【标题】和【发布时间】,以JSON数组返回。
HTML内容:
{html[:3000]}
"""
    try:
        response = openai.ChatCompletion.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt}],
            temperature=0
        )
        print(f"LLM解析结果 - {name}:\n", response["choices"][0]["message"]["content"])
    except Exception as e:
        print(f"[LLM Error] {name}: {e}")

六、结语

  • 规则解析适合稳定结构,但在动态页面与复杂布局中,维护成本过高。

  • LLM 提供了跨站点的泛化能力,能够直接理解内容语义。

  • 结合 高质量代理(如爬虫代理)确保网络环境稳定,才能让语义分析持续发挥作用。

    总结一句话:从“节点匹配”到“语义理解”,这是网页信息处理的必然升级路径。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值