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 的结果可缓存,避免重复调用大模型
相关推荐
极客BIM工作室1 小时前
大模型中的Scaling Law:AI的“增长密码“
人工智能
纪伊路上盛名在2 小时前
Alphafold实用指南—官网教程3
数据库·人工智能·机器学习·alphafold·计算生物学·结构生物学
茶杯6752 小时前
数字孪生厂商推荐:跨行业通用型平台与垂直领域专精企业对比指南
人工智能
道可云2 小时前
场景搭桥,产业赋能:新政策如何激活乡村振兴新动能
人工智能
诸葛务农2 小时前
人形机器人:热成像血管分布图及糖尿病足早期病变预警模型
人工智能·机器人
拾零吖2 小时前
Attention by 3B1B
人工智能·深度学习·机器学习
钟智强2 小时前
线性映射(Linear Mapping)原理详解:机器学习中的数学基石
人工智能·算法·机器学习
红尘炼丹客3 小时前
简析大模型(LLM)技术与量化交易
人工智能·金融
大福ya3 小时前
AI开源项目改造NextChat(ChatGPT-Next-Web)实现前端SSR改造打造一个初始框架
前端·chatgpt·前端框架·开源·aigc·reactjs·ai编程