跳到主要内容
爬虫与大模型结合实践:从基础提取到框架应用 | 极客日志
Python AI
爬虫与大模型结合实践:从基础提取到框架应用 综述由AI生成 探讨了将大模型能力与网络爬虫结合的技术方案。通过测试大模型对豆瓣电影页面 HTML 的数据提取效果,验证了直接调用 API 的可行性。随后介绍了基于 ScrapeGraphAI 框架的简化实现方式。文章对比了两种方法的代码复杂度与适用场景,并分析了在 Token 限制、反爬策略及成本方面的潜在挑战,为开发者提供构建智能爬虫的参考路径。
ArchDesign 发布于 2025/2/6 更新于 2026/5/1 10 浏览爬虫与大模型结合实践:从基础提取到框架应用
最近在学习大模型,之前我有过一段时间爬虫开发经验。在学习大模型的过程中,突发奇想能否将大模型的能力结合爬虫,搞个 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 ="https://movie.douban.com/subject/34453198/" = >
梦境
/ 仙境 / Wonderland
2024-06-05(韩国) / 汤唯 / 裴秀智 / 朴宝剑 / 郑有美 / 崔宇植 / 孔刘 / 鲍起静 / 崔武成 / 全秀芝 / 韩国 / 金泰勇 / 113 分钟 / 梦境 / 剧情 / 爱情 / 科幻 / 金泰勇 Tae-Yong Kim / 韩语 / 英语 / 汉语普通话
6.4
(6899 人评价)
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()
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 ,
)
return response.choices[0 ].message.content
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
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY" )
graph_config = {
"llm" : {
"api_key" : openai_key,
"model" : "gpt-3.5-turbo" ,
},
}
smart_scraper_graph = SmartScraperGraph(
prompt="获取需要电影名(name),封面链接(picture),简介 (info), 评分(score),评论人数(commentsNumber)。请使用括号的单词作为属性名,以 JSON 数组的格式返回" ,
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 等框架,开发者可以更专注于业务逻辑而非底层解析细节。然而,在引入大模型的同时,也需要权衡成本、速度和稳定性,根据具体场景选择合适的技术方案。
相关免费在线工具 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