我把 Playwright 爬虫脚本升级成了任务化 AI 数据平台(FastAPI + Streamlit)

0 阅读4分钟

最近我把自己的一个 Playwright quotes 爬虫项目,彻底从“能跑脚本”升级成了一个 任务化 AI 数据平台原型

它现在已经不是简单的:

爬一遍网页 → 输出一个 json → 结束

而是升级成了:

任务创建 → 历史记录 → FastAPI 服务 → Streamlit 可视化控制台

整个项目的工程感和展示感,直接提升了一个 level。


一、为什么普通爬虫脚本不够用了

我最开始的版本很简单:

  • Playwright 抓 quotes.toscrape.com
  • 保存到本地 json
  • 做作者和 tag 统计
  • 输出分析结果

这种写法能跑,但很快我发现几个明显问题:

1)结果会被覆盖

每次运行都写:

data/quotes_all.json

新的结果会覆盖旧结果。


2)没有任务历史

你根本不知道:

  • 上一次抓了多少页
  • 用的 local 还是 llm
  • 哪次成功哪次失败

3)没有 API 能力

它本质上还是一个:

只能本地命令行触发的脚本

没法被前端、接口或者其他服务调用。


4)没有展示层

即使结果出来了,也只是:

  • json 文件
  • txt 文件
  • 终端日志

很难直接展示给别人看。


二、第一步:把脚本升级成任务系统

我的第一步改造,就是引入:

task_id + task directory

每次执行任务都生成独立目录:

data/tasks/<task_id>/

目录里保存:

meta.json
quotes_all.json
llm_report.txt

📌 meta.json 存什么

每个任务都记录:

{
  "task_id": "8be74a50",
  "pages": 2,
  "mode": "local",
  "status": "success",
  "created_at": "2026-03-30T11:36:28"
}

e9a78090c76ca018cdf7e738a3f7d3a6.png


✅ 这一步带来的提升

这一步之后,项目第一次有了:

  • 任务生命周期
  • 任务状态管理
  • 历史结果可追踪
  • 独立结果持久化

本质上已经不是一次性脚本了。


三、第二步:FastAPI 服务化

下一步我做的是:

把 run_task() 暴露成 HTTP API

核心接口非常简单:

POST /tasks/run
GET /tasks
GET /tasks/{task_id}

分别负责:

  • 创建任务
  • 查看历史任务
  • 查看任务详情

🚀 为什么这一步很关键

因为这一步完成之后,整个项目从:

本地脚本

升级成了:

后端服务

任何前端、Dashboard、甚至别的 Agent 系统都可以直接调用。


📄 Swagger 自动文档

FastAPI 的一个高收益点是:

http://127.0.0.1:8000/docs

可以直接自动生成接口文档。

ae50b060b9cfbe0ceb052bc363632bf3.png 0300f763fd9d8e057c4e39b5b8c20adc.png 858f867dcaf27837bd38e7defb49838b.png 1d16c65fa1fc170bccf838cf82d9b901.png

这一步对于项目展示非常加分。


四、第三步:接一个 Streamlit Dashboard

后端有了之后,我没有继续卷接口,而是直接接了一个:

轻量可视化控制台

左边负责:

  • pages(抓几页)
  • mode(local / llm)
  • Run Task(创建任务)

右边负责:

  • 历史任务列表
  • success / failed 状态
  • task_id
  • 点开看详情

🎛️ 左侧任务控制面板

本质上就是:

向 FastAPI 发一个 POST 请求创建任务

dca7bbcff0db6669db87f0e34dbfcc3e.png


📂 右侧任务详情

每个任务点开后可以看到:

  • meta
  • quotes 原始数据
  • report 分析结果

这一下项目的“产品感”就完全出来了。

1f15aca86caae514f79034199381b1ac.png 80564177ecaff58f28426b304099491e.png 61026ec5e7ec7e695f038cd3760e5fea.png


五、项目最终架构

现在整个项目结构变成了:

Playwright → Task Pipeline → FastAPI → Streamlit Dashboard

它已经具备:

  • 浏览器自动化
  • 数据提取
  • 任务管理
  • 状态追踪
  • API 服务
  • 可视化控制台

六、这次升级最大的收获

我这次最大的感受不是“功能更多了”。

而是第一次真正体会到:

脚本和系统,差的不是代码量,而是结构

同样是 Playwright 爬虫:

普通版本

抓数据 → 输出文件

升级版本

创建任务 → 保存状态 → 查询历史 → API 调用 → Dashboard 展示

工程味完全不一样。


七、下一步优化方向

接下来我准备继续往下面几个方向迭代:

  • PostgreSQL 替代 JSON 存储
  • 后台异步任务队列
  • 多站点抓取
  • LLM 深度分析
  • RAG / 向量检索
  • Docker 部署

已经越来越像一个小型 AI 数据平台了。


八、总结

这次项目升级让我更确定一件事:

学生项目真正拉开差距的,不是多做功能,而是把一个能跑的东西做成“像系统”的样子。

从:

爬虫脚本

到:

任务化 AI 数据平台

这一步的收益,远比盲目开新项目高。

如果你也在做 Playwright、FastAPI、AI Agent 或 Python 工程项目,希望这篇文章能给你一些结构化升级思路。