2025 年用ChatGPT+代理构建AI驱动的智能爬虫

在 2025 年,Web 爬虫技术正经历一场由大模型驱动的变革。过去,我们依赖 XPath、CSS 选择器等硬编码规则解析网页结构------这种方式不仅繁琐,而且一旦网站改版,爬虫立刻失效。

如今,借助 ChatGPT(GPT 系列大模型) 的强大语义理解能力,我们可以让 AI 直接从原始 HTML 或 Markdown 中提取结构化数据,大幅降低开发复杂度,提升爬虫的鲁棒性与适应性。

本文将手把手教你:

  • 如何结合大模型与反反爬代理服务
  • 构建一个能自动解析商品信息的 AI 爬虫
  • 使用 Python 实现端到端流程(含完整代码)

注:文中涉及的代理服务将以"支持反反爬、返回 Markdown 格式"的通用接口为例,不绑定任何具体厂商。


一、为什么用 ChatGPT 做网页抓取?

传统爬虫的痛点:

  • 需手动编写选择器(如 div.price > span
  • 网站结构调整后立即失效
  • 多语言、动态渲染内容难以处理

AI 爬虫的优势:

  • 无需硬编码解析规则:只需提供提示词(prompt),AI 自动识别字段
  • 自适应页面变化:即使布局调整,只要内容语义不变,仍可正确提取
  • 支持非结构化内容:如从段落中抽取出"颜色""尺寸"等隐含信息

OpenAI等平台已提供专为结构化提取优化的 API 模式(如 response_format),可直接输出 JSON Schema 定义的数据对象。


二、典型应用场景

场景 说明
电商价格监控 从 Amazon、Shopify 等动态站点提取商品价格、库存、描述,即使页面频繁改版也能稳定抓取
内容聚合与摘要 抓取多源新闻/博客,用 GPT 自动标准化格式或生成摘要
智能爬虫调度 结合 RAG(检索增强生成),让爬虫根据上下文决定下一步抓取哪些链接
社交媒体数据采集 应对 React/Vue 动态渲染、无限滚动等传统爬虫难以处理的场景

三、技术架构概览

Matlab 复制代码
[目标网站]
     ↓ (通过反反爬代理访问)
[代理服务] → 返回干净的 Markdown/HTML
     ↓
[ChatGPT/GPT-4o] → 根据 Prompt 提取结构化数据
     ↓
[Pydantic 模型] → 输出标准化 Python 对象
     ↓
[JSON/数据库] → 存储结果

关键组件:

  • 反反爬代理:绕过 IP 封锁、验证码、浏览器指纹检测
  • Markdown 输出:比原始 HTML 更简洁,节省大模型 token 成本
  • 结构化输出:通过 JSON Schema 约束,确保数据格式一致

四、实战:用 Python 构建 AI 爬虫

步骤 1:环境准备

bash 复制代码
mkdir ai-scraper && cd ai-scraper
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install requests openai pydantic beautifulsoup4 markdownify

步骤 2:定义数据模型(Pydantic)

python 复制代码
# models.py
from pydantic import BaseModel
from typing import List, Optional

class Product(BaseModel):
    sku: Optional[str] = None
    name: Optional[str] = None
    price: Optional[str] = None
    description: Optional[str] = None
    images: Optional[List[str]] = None
    sizes: Optional[List[str]] = None
    colors: Optional[List[str]] = None
    category: Optional[str] = None

步骤 3:通过代理获取页面内容(通用接口示例)

⚠️ 此处使用伪代码模拟"支持反反爬并返回 Markdown 的代理服务"

python 复制代码
# fetcher.py
import requests

def fetch_page_markdown(url: str, proxy_api_key: str) -> str:
    """
    通过支持反反爬的代理服务获取页面的 Markdown 内容
    """
    headers = {
        "Authorization": f"Bearer {proxy_api_key}",
        "Content-Type": "application/json"
    }
    payload = {
        "url": url,
        "format": "raw",
        "data_format": "markdown"  # 关键:返回 Markdown 而非 HTML
    }
    response = requests.post(
        "https://api.proxy-service.com/unlock",  # 通用接口地址
        json=payload,
        headers=headers,
        timeout=30
    )
    return response.json().get("data", "")

步骤 4:调用大模型提取结构化数据

python 复制代码
# parser.py
from openai import OpenAI
from models import Product

def extract_product_with_gpt(markdown_content: str, openai_api_key: str) -> Product:
    client = OpenAI(api_key=openai_api_key)
    
    messages = [
        {"role": "system", "content": "你是一个专业的网页数据提取助手,请从以下内容中提取商品信息。"},
        {"role": "user", "content": f"请从以下 Markdown 内容中提取商品数据:\n\n{markdown_content}"}
    ]
    
    response = client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=messages,
        response_format=Product  # 强制输出 Pydantic 模型
    )
    return response.choices[0].message.parsed

步骤 5:主程序整合

python 复制代码
# main.py
from fetcher import fetch_page_markdown
from parser import extract_product_with_gpt
import json
import os

if __name__ == "__main__":
    URL = "https://example-shop.com/product/123"
    PROXY_KEY = os.getenv("PROXY_API_KEY")
    OPENAI_KEY = os.getenv("OPENAI_API_KEY")
    
    # 1. 获取页面 Markdown
    markdown = fetch_page_markdown(URL, PROXY_KEY)
    if not markdown:
        raise Exception("Failed to fetch page content")
    
    # 2. 用 GPT 提取结构化数据
    product = extract_product_with_gpt(markdown, OPENAI_KEY)
    
    # 3. 保存结果
    with open("product.json", "w", encoding="utf-8") as f:
        json.dump(product.model_dump(), f, indent=4, ensure_ascii=False)
    
    print("✅ 商品数据已保存至 product.json")

五、关键优势总结

技术点 价值
Markdown 输出 减少 HTML 标签噪声,降低 token 消耗 30%+
结构化输出(JSON Schema) 避免后处理,直接获得可用数据对象
代理服务集成 自动处理 CAPTCHA、IP 封锁、JS 渲染等反爬机制
Prompt 工程替代 XPath 开发效率提升,维护成本大幅下降

六、注意事项与最佳实践

  1. 控制成本:GPT 调用按 token 计费,尽量使用 Markdown 而非原始 HTML
  2. 错误重试机制:网络波动或模型解析失败时应自动重试
  3. 合规性 :遵守 robots.txt,避免高频请求,尊重网站版权
  4. 本地缓存:对相同 URL 的结果可缓存,避免重复调用大模型
相关推荐
Jerryhut9 分钟前
Bev感知特征空间算法
人工智能
xian_wwq19 分钟前
【学习笔记】基于人工智能的火电机组全局性能一体化优化研究
人工智能·笔记·学习·火电
B站计算机毕业设计之家23 分钟前
基于大数据热门旅游景点数据分析可视化平台 数据大屏 Flask框架 Echarts可视化大屏
大数据·爬虫·python·机器学习·数据分析·spark·旅游
春风LiuK32 分钟前
虚实无界:VRAR如何重塑课堂与突破研究边界
人工智能·程序人生
AI大模型学徒40 分钟前
大模型应用开发(十六)_知识库2
chatgpt·大模型·知识库·deepseek
歌_顿1 小时前
Embedding 模型word2vec/glove/fasttext/elmo/doc2vec/infersent学习总结
人工智能·算法
胡萝卜3.01 小时前
深入C++可调用对象:从function包装到bind参数适配的技术实现
开发语言·c++·人工智能·机器学习·bind·function·包装器
Echo_NGC22371 小时前
【KL 散度】深入理解 Kullback-Leibler Divergence:AI 如何衡量“像不像”的问题
人工智能·算法·机器学习·散度·kl
愤怒的可乐1 小时前
从零构建大模型智能体:OpenAI Function Calling智能体实战
人工智能·大模型·智能体
XiaoMu_0011 小时前
基于深度学习的农作物叶片病害智能识别与防治系统
人工智能·深度学习