跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

爬虫与大模型结合实践:从基础提取到框架应用

探讨了将大模型能力与网络爬虫结合的技术方案。通过测试大模型对豆瓣电影页面 HTML 的数据提取效果,验证了直接调用 API 的可行性。随后介绍了基于 ScrapeGraphAI 框架的简化实现方式。文章对比了两种方法的代码复杂度与适用场景,并分析了在 Token 限制、反爬策略及成本方面的潜在挑战,为开发者提供构建智能爬虫的参考路径。

ArchDesign发布于 2025/2/6更新于 2026/8/1739 浏览
爬虫与大模型结合实践:从基础提取到框架应用

爬虫与大模型结合实践:从基础提取到框架应用

最近在学习大模型,之前我有过一段时间爬虫开发经验。在学习大模型的过程中,突发奇想能否将大模型的能力结合爬虫,搞个 AI 爬虫玩一玩。

一、大模型数据提取能力测试

说干就干,先测试一下大模型的数据提取能力。我们选取一段豆瓣电影列表的 HTML 片段作为测试对象。

<table width="100%" class="">
    <tbody><tr class="item">
        <td width="100" valign="top">
                <a class="nbg" href="https://movie.douban.com/subject/34453198/" title="梦境">
                    <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2910694617.webp" width="75" alt="梦境" class="">
                </a>
        </td>
        <td valign="top">    
            <div class="pl2">
                <a href= =>
                    梦境
                    / 仙境 / Wonderland
                
                2024-06-05(韩国) / 汤唯 / 裴秀智 / 朴宝剑 / 郑有美 / 崔宇植 / 孔刘 / 鲍起静 / 崔武成 / 全秀芝 / 韩国 / 金泰勇 / 113 分钟 / 梦境 / 剧情 / 爱情 / 科幻 / 金泰勇 Tae-Yong Kim / 韩语 / 英语 / 汉语普通话             
                    
                            
                            6.4
                            (6899 人评价)
                    
            

        
    

"https://movie.douban.com/subject/34453198/"
class
""
<span style="font-size:13px;">
</span>
</a>
<p class="pl">
</p>
<div class="star clearfix">
<span class="allstar30">
</span>
<span class="rating_nums">
</span>
<span class="pl">
</span>
</div>
</div>
</td>
</tr>
</tbody>
</table>

我们将这段 HTML 交给大模型,让大模型帮我们提取其中的数据。提示词如下:

这是一段电影列表,去获取电影名(name),封面链接(picture),简介(info),评分(score), 评论人数(commetsNumber),请使用括号的单词作为属性名,以 JSON 数组的格式返回

这是大模型的返回结果:

[
    {
        "name": "梦境",
        "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2910694617.webp",
        "info": "2024-06-05(韩国) / 汤唯 / 裴秀智 / 朴宝剑 / 郑有美 / 崔宇植 / 孔刘 / 鲍起静 / 崔武成 / 全秀芝 / 韩国 / 金泰勇 / 113 分钟 / 梦境 / 剧情 / 爱情 / 科幻 / 金泰勇 Tae-Yong Kim / 韩语 / 英语 / 汉语普通话",
        "score": "6.4",
        "commentsNumber": "6899 人评价"
    },
    {
        "name": "犯罪都市 4",
        "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2903301473.webp",
        "info": "2024-02-23(柏林电影节) / 2024-04-24(韩国) / 马东锡 / 金武烈 / 李东辉 / 朴智焕 / 李主傧 / 金敏载 / 金英熊 / 韩国 / 许明行 / 110 分钟 / 犯罪都市 4 / 动作 / 犯罪 / 惊悚 / 吴相浩 Sang-ho Oh / 韩语 / 英语 / 菲律宾语 / 汉语普通话",
        "score": "6.6",
        "commentsNumber": "23916 人评价"
    }
]

发现可以提取到数据,那么接下来我们去写代码。

二、基础实现方案

使用 Python 的 requests 库获取页面 HTML,然后调用大模型 API 进行解析。

import requests
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

# 需要配置自己的 api_key
client = OpenAI()

url = "https://movie.douban.com/chart"

header = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=header)

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,  # 模型输出的随机性,0 表示随机性最小
    )
    return response.choices[0].message.content

# 注意:如果将所有获取到的页面 HTML 都交给大模型,token 数量可能会超限
prompt = "{} 这是一部电影的 html 片段。获取需要电影名(name),封面链接(picture),简介 (info), 评分(score),评论人数(commentsNumber)。请使用括号的单词作为属性名,以 JSON 数组的格式返回".format(response.text)

print(get_completion(prompt))

这段代码实现了获取页面 HTML 并交给大模型提取数据的基本流程。大家自己做测试的时候,可以把 HTML 的范围缩小一点,不然 token 可能会超。

但是这段代码是比较粗糙的,在实际生产环境中,我们需要考虑更稳健的方案。

三、基于 ScrapeGraphAI 框架的实现

在我觉得这个事情搞不下去的时候,搜了一下有没有这方面的框架,还真让我搜到了 ScrapeGraphAI。

根据他的文档写了一个案例:

import os
from dotenv import load_dotenv
from scrapegraphai.graphs import SmartScraperGraph
from scrapegraphai.utils import prettify_exec_info
import json

# 从.env 加载环境变量
load_dotenv()

# 从环境变量加载 openai key
openai_key = os.getenv("OPENAI_APIKEY")

# 配置 SmartScraperGraph
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "gpt-3.5-turbo",
   },
}

# 创建 SmartScraperGraph 并运行
smart_scraper_graph = SmartScraperGraph(
   prompt="获取需要电影名(name),封面链接(picture),简介 (info), 评分(score),评论人数(commentsNumber)。请使用括号的单词作为属性名,以 JSON 数组的格式返回",
   # 接收一个 html 网页页面
   source="https://movie.douban.com/chart",
   config=graph_config
)

# 执行爬虫并保存结果
result = smart_scraper_graph.run()
with open("results.json", 'w', encoding='utf-8') as f:
      json.dump(result, f, indent=4)

这个框架,发送请求、数据提取,全都交给了大模型去处理,整体代码非常的简洁,只需要 URL 地址和提示词 (prompt) 就可以了。

四、技术选型与优化建议

虽然上述方案可行,但在实际应用中需要注意以下几点:

1. Token 成本与限制

大模型 API 通常按 Token 计费,且存在上下文长度限制。如果目标网页内容过长,直接传入可能会导致超出最大 Token 限制或产生高昂费用。建议先使用传统解析器(如 BeautifulSoup)对 HTML 进行初步清洗,只保留关键节点后再发送给大模型。

2. 反爬策略

大模型本身不具备绕过反爬机制的能力。如果目标网站有严格的 IP 限制或验证码,仍需配合代理 IP 池、Cookie 管理或专门的反爬库来解决。此外,高频调用大模型 API 也可能触发频率限制。

3. 数据准确性

大模型存在幻觉风险,对于结构化要求极高的数据(如价格、库存),建议增加后处理校验逻辑。可以通过正则表达式或 Schema 验证来确保返回数据的格式符合预期。

4. 延迟问题

相比传统的解析方式,调用大模型 API 的响应时间较长。对于实时性要求高的场景,需评估是否值得牺牲速度换取灵活性。

五、总结

将大模型能力结合爬虫,特别适合处理非结构化或半结构化的网页数据,能够显著降低针对复杂布局编写解析规则的成本。通过 ScrapeGraphAI 等框架,开发者可以更专注于业务逻辑而非底层解析细节。然而,在引入大模型的同时,也需要权衡成本、速度和稳定性,根据具体场景选择合适的技术方案。

目录

  1. 爬虫与大模型结合实践:从基础提取到框架应用
  2. 一、大模型数据提取能力测试
  3. 二、基础实现方案
  4. 需要配置自己的 api_key
  5. 注意:如果将所有获取到的页面 HTML 都交给大模型,token 数量可能会超限
  6. 三、基于 ScrapeGraphAI 框架的实现
  7. 从.env 加载环境变量
  8. 从环境变量加载 openai key
  9. 配置 SmartScraperGraph
  10. 创建 SmartScraperGraph 并运行
  11. 接收一个 html 网页页面
  12. 执行爬虫并保存结果
  13. 四、技术选型与优化建议
  14. 1. Token 成本与限制
  15. 2. 反爬策略
  16. 3. 数据准确性
  17. 4. 延迟问题
  18. 五、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux truncate 命令实战:清理日志与调整大小
  • FastGPT 集成 MCP 协议构建工具增强型智能体
  • Python 调用大模型(LLM)的四种方式及对比分析
  • 老龄化压力下护理机器人的发展与分化
  • 基于 SSM 框架的高校宿舍报修与换宿管理系统设计
  • JavaScript 基础:鼠标事件中的修饰键与相关元素
  • 基于 n8n 与 AI 模型的智能写作工作流构建
  • Linux 进程控制:深入理解进程程序替换与 exec 系列函数
  • OpenCode 开源 AI 编程助手核心功能与使用方式
  • JavaScript 中 var、let、const 的核心区别与实战应用
  • 基于 DroneVehicle 数据集的 YOLOv11 无人机车辆目标检测
  • Logitech 设备连接问题快速解决指南
  • C++ 面向对象三大特性:继承
  • ORB-SLAM3:开源视觉、视觉惯性及多地图 SLAM 库
  • 国内 Stable Diffusion 与 LLaMA 模型镜像站推荐及训练实践
  • Python Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
  • OpenClaw Memory 本地模式配置:Ubuntu CUDA cuDNN llama.cpp
  • Qwen3-TTS-VoiceDesign 实战:AR 导览眼镜空间音频定位语音生成
  • C++ 游戏开发入门与进阶指南
  • Kohya's GUI 教程:Stable Diffusion 模型训练与 LoRA 定制

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online