🚀 基于 FastAPI + Vue3 + Playwright 的全栈商品数据爬取和分析工具
本项目是一个智能的商品调研工具,能够自动爬取淘宝商品数据并生成详细的调研报告。系统采用前后端分离架构,支持异步任务处理、实时状态更新和智能数据分析。
- 🔍 智能搜索: 根据关键词自动搜索商品
- 🤖 自动爬取: 使用 Playwright 自动化浏览器爬取数据
- 📊 数据分析: 自动生成价格统计、销量分析等
- 📑 报告生成: 生成美观的 Markdown 格式调研报告
- ⚡ 实时更新: 支持任务进度实时查看
- 🛡️ 智能回退: 网络问题时自动使用模拟数据
- FastAPI: 现代化的 Python Web 框架
- Playwright: 自动化浏览器控制
- SQLAlchemy: ORM 数据库操作
- Pydantic: 数据验证和序列化
- SQLite: 轻量级数据库存储
- Jinja2: 报告模板渲染
- Vue 3: 现代化前端框架
- Element Plus: 优雅的 UI 组件库
- TypeScript: 类型安全的 JavaScript
- Axios: HTTP 客户端
- Vite: 快速的构建工具
- Python 3.8+
- Node.js 16+
- npm 或 yarn
git clone <repository-url>
cd pachong-cursor# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 安装 Playwright 浏览器
playwright install chromium
# 复制配置文件
cp env.example .env
# 启动后端服务
python -m uvicorn backend.app.main:app --reload --port 8000# 进入前端目录
cd frontend
# 安装依赖
npm install
# 复制配置文件
cp env.example .env
# 启动前端开发服务器
npm run dev- 前端应用: http://localhost:5173
- 后端API: http://localhost:8000
- API文档: http://localhost:8000/docs
- 打开应用: 访问 http://localhost:5173
- 输入关键词: 在搜索框中输入商品关键词(如"手机"、"笔记本电脑")
- 开始爬取: 点击"开始爬取"按钮
- 查看进度: 实时查看任务执行进度
- 下载报告: 任务完成后下载生成的调研报告
- 在"最近任务"列表中查看所有历史任务
- 点击"查看"按钮查看任务详情
- 支持取消正在执行的任务
curl -X POST http://localhost:8000/api/v1/tasks \
-H "Content-Type: application/json" \
-d '{"keyword": "手机"}'curl http://localhost:8000/api/v1/tasks/{task_id}curl http://localhost:8000/api/v1/reports/{task_id}/download# 数据库配置
DATABASE_URL=sqlite:///./data.sqlite3
# 浏览器配置
BROWSER_HEADLESS=true
BROWSER_TIMEOUT=30000
# 淘宝配置
TAOBAO_LOGIN_URL=https://login.taobao.com/
TAOBAO_SEARCH_BASE_URL=https://s.taobao.com/search
# 模拟数据模式(开发/测试用)
ENABLE_MOCK_DATA=false
# 报告配置
REPORTS_DIR=reports
# 日志配置
LOG_LEVEL=INFO# API服务器地址
VITE_API_BASE_URL=http://localhost:8000
# 应用配置
VITE_APP_TITLE=淘宝智能商品调研工具
VITE_APP_VERSION=1.0.0在开发或演示环境中,可以启用模拟数据模式避免实际网络爬取:
# 设置环境变量
export ENABLE_MOCK_DATA=true
# 或在 .env 文件中设置
ENABLE_MOCK_DATA=true
# 重启后端服务
python -m uvicorn backend.app.main:app --reload --port 8000# 运行后端测试
cd backend
python -m pytest tests/
# 运行前端测试
cd frontend
npm run test
# 数据提取器测试
python test_extractor.py
# 爬取流程调试
python debug_crawler.py后端日志会输出到控制台,包含以下信息:
- API 请求日志
- 任务执行状态
- 数据爬取进度
- 错误和警告信息
# 查看数据库内容
python -c "
import sqlite3
conn = sqlite3.connect('data.sqlite3')
cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM products')
print(f'商品数量: {cursor.fetchone()[0]}')
conn.close()
"生成的报告保存在 reports/ 目录下,文件命名格式:
report_{关键词}_{时间戳}.md
A: 可能是网络问题或反爬虫机制。建议:
- 检查网络连接
- 启用模拟数据模式:
ENABLE_MOCK_DATA=true - 查看后端日志了解具体错误
A: 这是正常现象,淘宝有反爬虫机制。系统会自动回退到模拟数据模式。
A: 检查:
- 后端服务是否正常启动(端口8000)
- 前端配置中的API地址是否正确
- 浏览器控制台是否有CORS错误
A: 尝试:
# 手动安装
playwright install chromium
# 或使用系统浏览器
playwright install-deps- 本工具仅用于学习和研究目的
- 请遵守目标网站的 robots.txt 和使用条款
- 不要进行大规模或高频率的数据爬取
- 建议在开发环境中使用模拟数据模式
# 后端生产模式
pip install gunicorn
gunicorn backend.app.main:app -w 4 -k uvicorn.workers.UvicornWorker
# 前端构建
cd frontend
npm run build
# 使用 nginx 或其他 web 服务器部署 dist/ 目录对于大量数据,建议:
- 使用 PostgreSQL 替代 SQLite
- 添加数据库索引
- 定期清理历史数据
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
- FastAPI - 现代化的 Python Web 框架
- Vue.js - 渐进式 JavaScript 框架
- Playwright - 现代化的浏览器自动化
- Element Plus - Vue 3 UI 组件库
如有问题或建议,请提交 Issue 或联系项目维护者。
- ✅ 完整的前后端分离架构
- ✅ 异步任务处理系统
- ✅ 智能数据提取和回退机制
- ✅ 现代化的 Web 界面
- ✅ 完善的 API 文档和部署指南
- ✅ Docker 容器化支持
- ✅ 模拟数据模式用于开发测试
⭐ 如果这个项目对您有帮助,请给它一个 Star!