北京新发地农产品批发市场是全国农产品价格的 "风向标",其每日菜价数据对批发商、零售商、餐饮企业及普通消费者都有重要参考价值。然而新发地官网仅提供基础列表展示,缺乏搜索、历史对比、趋势分析等功能,且数据分散在多个分类页面中,人工查询效率低下。本项目旨在解决菜价数据获取难、查询慢、无趋势分析的痛点,通过自动化采集 + 结构化存储 + 可视化查询,为用户提供一站式新发地菜价查询服务。
点击空白处退出提示
北京新发地农产品批发市场是全国农产品价格的 "风向标",其每日菜价数据对批发商、零售商、餐饮企业及普通消费者都有重要参考价值。然而新发地官网仅提供基础列表展示,缺乏搜索、历史对比、趋势分析等功能,且数据分散在多个分类页面中,人工查询效率低下。本项目旨在解决菜价数据获取难、查询慢、无趋势分析的痛点,通过自动化采集 + 结构化存储 + 可视化查询,为用户提供一站式新发地菜价查询服务。
项目包含七大核心功能模块:①**一体化启动器**:双击 exe 自动检查数据库、按需采集、启动 Web 服务并打开浏览器,零配置使用;②**数据采集模块**:双模式爬虫 —— 主模式调用新发地 JSON API 高效采集,备用模式用 Selenium 无头浏览器 + BeautifulSoup 解析 HTML 表格兜底,自动发现全部分类并批量去重入库;③**数据存储层**:MySQL 存储分类、商品、每日价格(最低 / 平均 / 最高价、规格、单位、产地)及采集运行记录四张表;④**商品搜索功能**:支持关键词模糊搜索、日期选择、分类筛选、分页展示,结果表格含较前日涨跌标识;⑤**商品详情页**:展示今日均价 / 最低 / 最高统计卡片、较前日涨跌额与涨跌幅;⑥**价格趋势分析**:基于 Chart.js 绘制 7 天 / 30 天 / 90 天价格走势折线图,支持动态切换;⑦**定时自动采集**:APScheduler 后台线程每日定时更新数据,保证数据新鲜度。同时提供完整 REST API(健康检查、分类列表、搜索、商品详情、价格历史、价格趋势),统一 JSON 响应格式。
**我负责全部开发工作**,包括架构设计、爬虫编写、后端 API、前端页面及打包部署。技术栈采用 Python 3.13 + Flask(应用工厂模式)+ MySQL + Flask-SQLAlchemy ORM,爬虫使用 requests+Selenium+BeautifulSoup 双模式,定时任务用 APScheduler,前端为 Jinja2 + 原生 JS+Chart.js,最终用 PyInstaller 打包为单文件 exe。**架构亮点**:采用分层架构(启动层→路由层→服务层→模型层→爬虫层),职责清晰易维护;双模式爬虫设计保证了采集稳定性,API 不可用时自动降级到 HTML 抓取;统一 REST API 响应格式便于前后端分离和第三方对接。**技术难点**:①新发地官网数据分散且无公开文档,通过逆向分析找到 JSON API 接口并实现自动分类发现;②PyInstaller 打包 Flask 应用时模板和静态资源路径兼容问题,通过自定义`_get_base_dir`函数解决 frozen 环境路径问题;③价格涨跌计算需处理跨日数据对齐和缺失日期回退逻辑;④Selenium 无头模式在无 GUI 服务器环境下的 Chrome 配置优化。项目已打包为桌面 exe 程序,双击即可运行。



评论