爬虫+大模型结合:让AI自动写XPath和清洗规则

在网络爬虫的开发流程中,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 和清洗规则,快速搭建爬虫:

场景需求

爬取某电商平台商品列表页的 "商品名称""原价""现价""评分",要求:

  1. 商品名称去除 "热销""包邮" 等标签;
  2. 原价、现价去除逗号,保留两位小数;
  3. 评分从 "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 在手,爬虫无忧" 的开发快感!

相关推荐
WebGoC开发者8 小时前
【备赛指导】佛山市青少年科技创新大赛暨佛山市青少年人工智能科创节 智趣AI竞技赛 流程详解
人工智能·经验分享·科技·ai·青少年科技竞赛
大千AI助手8 小时前
模糊集合理论:从Zadeh奠基到现代智能系统融合
人工智能·机器学习·集合·模糊理论·大千ai助手·模糊集合·fuzzysets
数据门徒8 小时前
《人工智能现代方法(第4版)》 第7章 逻辑智能体 学习笔记
人工智能·笔记·学习
生成论实验室8 小时前
周林东的生成论入门十讲 · 第八讲 生成的世界——物理学与生物学新视角
人工智能·科技·神经网络·信息与通信·几何学
东方不败之鸭梨的测试笔记9 小时前
测试工程师如何利用AI大模型?
人工智能
智能化咨询9 小时前
(68页PPT)埃森哲XX集团用户主数据治理项目汇报方案(附下载方式)
大数据·人工智能
说私域9 小时前
分享经济应用:以“开源链动2+1模式AI智能名片S2B2C商城小程序”为例
人工智能·小程序·开源
工业机器视觉设计和实现9 小时前
我的第三个cudnn程序(cifar10改cifar100)
人工智能·深度学习·机器学习
熊猫钓鱼>_>9 小时前
PyTorch深度学习框架入门浅析
人工智能·pytorch·深度学习·cnn·nlp·动态规划·微分