在网络爬虫的开发流程中,XPath 路径编写与数据清洗规则制定是两大核心痛点。传统方式下,开发者需要逐行分析网页 DOM 结构,手动调试 XPath 语法,还要针对不同网站的 HTML 格式差异,编写复杂的正则表达式或条件判断逻辑来清洗数据,不仅耗时耗力,还容易因网页结构变动导致爬虫失效。而大模型的出现,正彻底改变这一现状 ------ 通过将爬虫技术与大模型结合,我们可以让 AI 自动完成 XPath 编写和数据清洗规则生成,大幅提升爬虫开发效率,降低技术门槛。
一、传统爬虫开发的核心痛点
在没有 AI 辅助的情况下,爬虫开发中的 XPath 编写和数据清洗环节面临诸多挑战:
1. XPath 编写: DOM 结构分析成本高
网页 DOM 结构复杂多变,嵌套层级深、标签属性不统一是常见问题。开发者需要借助浏览器开发者工具逐节点定位目标数据,手动拼接 XPath 路径(如//div[@class="content"]/ul/li/a/text()),且需反复调试才能确保路径准确性。更棘手的是,许多网站会通过动态渲染、CSS 类名随机生成等方式反爬,导致手动编写的 XPath 极易失效,需要持续维护。
2. 数据清洗:规则编写繁琐且通用性差
爬取到的原始数据往往包含冗余信息(如 HTML 标签、空格、广告文本)、格式不统一(如日期格式、数值单位差异)等问题。传统方案中,开发者需要针对每个字段编写专属清洗规则:用正则表达式提取核心内容、用字符串方法去除冗余字符、用条件判断统一数据格式。这些规则通常仅适用于特定网站,换个爬取目标就需要重新编写,重复劳动量大。
3. 技术门槛高:新手入门难度大
对于爬虫新手而言,XPath 语法的灵活运用、正则表达式的精准匹配、数据清洗逻辑的合理设计都是不小的挑战。往往需要花费大量时间学习相关知识,才能独立完成一个简单爬虫的开发,这也导致许多非技术背景的用户难以利用爬虫获取所需数据。
二、大模型赋能:AI 自动搞定 XPath 与清洗规则的核心逻辑
大模型之所以能替代人工完成这些重复性工作,核心在于其强大的自然语言理解能力 和代码生成能力。通过将 "网页结构信息" 与 "数据需求" 转化为自然语言指令,大模型可以快速解析需求、分析结构,输出符合要求的 XPath 路径和清洗规则。其核心逻辑可分为三步:
1. 信息输入:向大模型提供 "上下文 + 需求"
要让 AI 精准生成结果,需要向大模型传递两类关键信息:
- 网页结构信息:可以是网页的 HTML 源代码片段(无需完整代码,只需包含目标数据所在的 DOM 节点)、浏览器开发者工具中的元素截图(部分支持图像理解的大模型可直接识别),或对 DOM 结构的文字描述(如 "目标数据在 class 为'product-list'的 div 下,每个 li 标签包含商品名称和价格")。
- 明确的需求指令:用自然语言说明需要爬取的字段(如 "爬取商品名称、价格、评分")、数据格式要求(如 "价格保留两位小数,评分转换为数字")、清洗需求(如 "去除商品名称中的'限时折扣'字样,去除价格中的逗号")。
2. 大模型解析:理解结构与需求,生成方案
大模型接收到信息后,会完成两项核心工作:
- 解析 DOM 结构:识别 HTML 标签的嵌套关系、属性特征(class、id、name 等),定位目标数据所在的节点位置,避开动态渲染或反爬干扰的节点。
- 转化需求为代码 / 规则:将自然语言需求转化为技术实现方案 ------ 针对 XPath,生成精准定位目标节点的路径;针对数据清洗,生成包含正则表达式、字符串处理、格式转换的代码(如 Python 代码片段)。
3. 结果输出:直接使用或微调优化
大模型会输出可直接用于爬虫的结果,例如:
- 生成的 XPath 路径:
//div[@class="product-list"]/li//h3/text()(商品名称)、//div[@class="product-list"]/li//span[@class="price"]/text()(价格)。 - 生成的数据清洗代码(Python 示例):
python
运行
import re
# 清洗商品名称:去除"限时折扣"字样和多余空格
def clean_name(name):
if not name:
return ""
cleaned = re.sub(r"限时折扣", "", name.strip())
return cleaned
# 清洗价格:去除逗号,保留两位小数
def clean_price(price):
if not price:
return 0.00
# 提取数字部分(支持带逗号或小数点的格式)
num = re.findall(r"\d+(\.\d+)?", price.replace(",", ""))[0]
return round(float(num), 2) if num else 0.00
若生成的结果存在偏差(如 XPath 定位不到数据、清洗规则不完整),只需向大模型反馈问题(如 "这个 XPath 爬取到的是广告内容,目标数据在 class 为'real-product'的 li 标签下"),大模型即可快速修正结果。
三、实战案例:用大模型快速开发一个商品爬虫
下面通过一个具体案例,展示如何用大模型自动生成 XPath 和清洗规则,快速搭建爬虫:
场景需求
爬取某电商平台商品列表页的 "商品名称""原价""现价""评分",要求:
- 商品名称去除 "热销""包邮" 等标签;
- 原价、现价去除逗号,保留两位小数;
- 评分从 "4.8 分" 转化为数字 4.8。
步骤 1:向大模型提供信息
- 网页 HTML 片段(简化版):
html
预览
<div class="product-container">
<ul class="product-items">
<li class="product-item">
<h3 class="item-name">【热销】2024新款夏季连衣裙 包邮</h3>
<div class="price-box">
<span class="original-price">¥1,299.00</span>
<span class="current-price">¥899.00</span>
</div>
<div class="score">4.8分</div>
</li>
<li class="product-item">
<h3 class="item-name">【包邮】男士休闲运动鞋 透气款</h3>
<div class="price-box">
<span class="original-price">¥899.00</span>
<span class="current-price">¥599.00</span>
</div>
<div class="score">4.6分</div>
</li>
</ul>
</div>
- 需求指令:"根据上面的 HTML,生成爬取商品名称、原价、现价、评分的 XPath 路径,同时编写 Python 清洗函数,要求:1. 商品名称去除'【热销】''【包邮】'标签和多余空格;2. 原价和现价去除逗号,保留两位小数;3. 评分转化为数字格式。"
步骤 2:大模型输出结果
生成的 XPath 路径:
- 商品名称:
//ul[@class="product-items"]/li/h3[@class="item-name"]/text() - 原价:
//ul[@class="product-items"]/li/div[@class="price-box"]/span[@class="original-price"]/text() - 现价:
//ul[@class="product-items"]/li/div[@class="price-box"]/span[@class="current-price"]/text() - 评分:
//ul[@class="product-items"]/li/div[@class="score"]/text()
生成的 Python 清洗代码:
python
运行
import re
def clean_product_data(raw_data):
"""
清洗商品数据的统一函数
raw_data: 字典,包含原始爬取的name、original_price、current_price、score
return: 清洗后的字典
"""
cleaned_data = {}
# 清洗商品名称
name = raw_data.get("name", "").strip()
# 去除【热销】【包邮】等带【】的标签
cleaned_name = re.sub(r"【[^】]*】", "", name)
cleaned_data["name"] = cleaned_name.strip()
# 清洗原价
original_price = raw_data.get("original_price", "¥0.00").replace("¥", "").replace(",", "")
cleaned_original_price = round(float(re.findall(r"\d+(\.\d+)?", original_price)[0] if re.findall(r"\d+(\.\d+)?", original_price) else 0), 2)
cleaned_data["original_price"] = cleaned_original_price
# 清洗现价
current_price = raw_data.get("current_price", "¥0.00").replace("¥", "").replace(",", "")
cleaned_current_price = round(float(re.findall(r"\d+(\.\d+)?", current_price)[0] if re.findall(r"\d+(\.\d+)?", current_price) else 0), 2)
cleaned_data["current_price"] = cleaned_current_price
# 清洗评分
score = raw_data.get("score", "0分").replace("分", "").strip()
cleaned_score = float(score) if score.replace(".", "").isdigit() else 0.0
cleaned_data["score"] = cleaned_score
return cleaned_data
步骤 3:整合到爬虫中,直接运行
将生成的 XPath 和清洗函数整合到 Python 爬虫框架(如 requests+lxml)中,即可快速实现数据爬取与清洗:
python
运行
import requests
from lxml import etree
import re
# 大模型生成的XPath
XPATHS = {
"name": '//ul[@class="product-items"]/li/h3[@class="item-name"]/text()',
"original_price": '//ul[@class="product-items"]/li/div[@class="price-box"]/span[@class="original-price"]/text()',
"current_price": '//ul[@class="product-items"]/li/div[@class="price-box"]/span[@class="current-price"]/text()',
"score": '//ul[@class="product-items"]/li/div[@class="score"]/text()'
}
# 大模型生成的清洗函数
def clean_product_data(raw_data):
# 此处省略清洗函数代码(同上)
pass
# 爬虫主逻辑
def crawl_products(url):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
# 爬取原始数据
raw_names = html.xpath(XPATHS["name"])
raw_original_prices = html.xpath(XPATHS["original_price"])
raw_current_prices = html.xpath(XPATHS["current_price"])
raw_scores = html.xpath(XPATHS["score"])
# 整合并清洗数据
products = []
for i in range(len(raw_names)):
raw_data = {
"name": raw_names[i] if i < len(raw_names) else "",
"original_price": raw_original_prices[i] if i < len(raw_original_prices) else "",
"current_price": raw_current_prices[i] if i < len(raw_current_prices) else "",
"score": raw_scores[i] if i < len(raw_scores) else ""
}
cleaned_data = clean_product_data(raw_data)
products.append(cleaned_data)
return products
# 运行爬虫
if __name__ == "__main__":
url = "目标电商平台商品列表页URL"
products = crawl_products(url)
for product in products:
print(product)
整个过程中,开发者无需手动编写 XPath 和清洗规则,仅需提供 HTML 片段和需求指令,即可通过大模型快速生成核心代码,大幅缩短爬虫开发周期。
四、主流大模型工具推荐与使用技巧
1. 主流大模型推荐
不同大模型在代码生成精度、对 HTML 结构的理解能力上存在差异,以下是适合爬虫开发的几款工具:
- ChatGPT 4o:对复杂 DOM 结构的解析能力强,代码生成精度高,支持图像输入(可直接上传浏览器元素截图生成 XPath),适合需要精准规则的场景。
- Claude 3:处理长文本(如完整 HTML 源代码)的能力突出,生成的代码逻辑清晰、注释完善,适合需要批量生成规则的场景。
- 通义千问:对中文需求的理解更精准,支持将清洗规则生成多种语言代码(如 Python、JavaScript),适合国内用户使用。
- CodeLlama:专为代码生成设计的大模型,生成的 XPath 和正则表达式效率更高,适合技术开发者追求极致性能的场景。
2. 提升 AI 生成效果的核心技巧
要让大模型生成的 XPath 和清洗规则更精准,可遵循以下技巧:
- HTML 片段精准化:仅提供目标数据所在的 DOM 节点片段,避免多余代码干扰大模型判断(可通过浏览器开发者工具复制 "元素" 而非完整 HTML)。
- 需求指令具体化:避免模糊表述,例如不说 "清洗价格",而说 "去除价格中的逗号和人民币符号,将字符串转化为保留两位小数的浮点数"。
- 提供示例参考:若对结果格式有特定要求,可提供示例(如 "原始价格:'¥1,299.00',清洗后:1299.00"),帮助大模型理解预期输出。
- 逐步优化迭代:若首次生成的结果存在问题,不要重新提问,而是基于原有结果反馈修改意见(如 "这个 XPath 爬取到了空值,可能是 class 名称有误,正确的 class 是'product-item-active'"),大模型会基于上下文快速修正。
五、注意事项与未来趋势
1. 注意事项
- 网页动态渲染问题:若网页通过 JavaScript 动态加载数据(如滚动加载、点击加载),仅提供静态 HTML 片段可能无法让大模型生成有效的 XPath。此时需先通过 Selenium、Playwright 等工具获取动态渲染后的 HTML,再传递给大模型。
- 反爬机制规避:大模型生成的 XPath 可能过于直白(如依赖固定 class 名称),容易触发网站反爬。建议在生成后添加随机延迟、更换 User-Agent 等反爬策略,或让大模型生成更灵活的 XPath(如基于标签层级而非 class 名称)。
- 结果验证不可少:虽然大模型生成的代码精度较高,但仍需通过实际爬取测试验证 XPath 的有效性和清洗规则的完整性,避免因网页结构变动或大模型理解偏差导致数据爬取失败。
2. 未来趋势
随着大模型与爬虫技术的深度融合,"零代码爬虫" 将成为可能 ------ 用户只需输入目标网站 URL 和数据需求,AI 即可自动完成网页分析、XPath 生成、清洗规则编写、爬虫部署全流程。此外,大模型还将具备 "自适应爬取" 能力:当网页结构发生变动时,AI 可自动检测变化,调整 XPath 和清洗规则,实现爬虫的自主维护。这不仅将彻底降低爬虫技术的使用门槛,还将让数据获取变得更加高效、便捷。
总结
爬虫与大模型的结合,本质上是用 AI 替代人工完成重复性、规则性的技术工作,让开发者从繁琐的 XPath 编写和清洗规则制定中解放出来,将精力集中在核心业务逻辑上。无论是技术开发者还是非技术背景的用户,都可以借助这一组合快速实现数据爬取需求。随着大模型技术的持续迭代,爬虫开发将变得越来越简单、高效,数据的价值也将得到更充分的挖掘与利用。如果你还在为编写 XPath 和清洗规则烦恼,不妨试试用大模型赋能,体验 "AI 在手,爬虫无忧" 的开发快感!