—— 深度解析型:从DOM树到语义理解的技术演进
在互联网信息处理领域,传统做法通常依赖 XPath 或 CSS 选择器 来定位网页中的标签和节点,从而完成信息抽取。但随着前端框架(React、Vue、Angular)的普及,这些方法逐渐显现出局限性:
这推动了信息处理技术的演化:从结构匹配走向语义级别的理解。而 LLM(大语言模型)提供了一种新的思路,它不仅能读取 HTML,还能像人一样理解文本背后的意义。
┌──────────┐ ┌────────────┐ ┌────────────┐
│ 请求控制层 │───▶ │ 页面加载层 │───▶ │ 网络通道管理 │
└──────────┘ └────────────┘ └────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ 规则解析 (XPath/CSS) │ │ LLM语义分析模块 │
└──────────────────────┘ └──────────────────────┘
│ │
└───── 技术演化树 ─────┘
requests
或浏览器自动化工具加载页面,确保动态内容被完整保留。title
, time
, source
)。场景 | 规则解析成功率 | LLM成功率 | 处理时间(秒) |
---|---|---|---|
电商活动页 | 58% | 94% | 2.3 |
新闻门户页 | 63% | 92% | 1.9 |
社交动态流 | 41% | 89% | 2.6 |
结论:
信息处理阶段 ──▶ 页面理解阶段 ──▶ 语义智能阶段
正则表达式 ──▶ XPath/CSS ──▶ LLM语义理解
(1998) (2005) (2023)
以下示例展示如何对 5个主流新闻站点首页进行信息抽取,并结合 LLM 提炼出标题和时间。
import requests
from bs4 import BeautifulSoup
import openai # 用于调用 LLM
# ======亿牛云爬虫代理配置 ======
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}")
总结一句话:从“节点匹配”到“语义理解”,这是网页信息处理的必然升级路径。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。