一、项目技术

开发语言:Python
python框架:Django
软件版本:python3.7/python3.8
数据库:mysql 5.7或更高版本
数据库工具:Navicat11
开发软件:PyCharm/vs code
前端框架:vue.js

二、项目内容和功能介绍

一、系统核心定位​
基于 Python 爬虫的新能源汽车数据分析与可视化系统,是专为汽车行业研究者、消费者、车企及政策制定者打造的 “数据采集 - 清洗分析 - 可视化展示” 一体化平台。该系统解决新能源汽车领域 “数据分散(散落在车企官网、第三方平台等)、分析低效(人工整理耗时)、趋势难洞察(缺乏直观展示)” 等痛点,通过爬虫技术自动采集多源数据,结合数据分析与可视化技术,将 “车型参数、销量数据、用户评价、政策补贴” 等信息转化为直观图表和趋势报告。无论是消费者对比车型、研究者分析市场趋势,还是车企优化产品策略,都能通过系统高效获取数据支撑,让新能源汽车数据从 “分散碎片” 转向 “结构化洞察”。​
二、核心技术栈与架构设计​

  1. 数据采集层(核心支撑)​
    爬虫核心框架:Scrapy + Requests​
    Scrapy 作为主力爬虫框架,用于批量采集结构化数据(如车企官网的车型参数、汽车之家的销量排行榜)。通过自定义 Spider(如 “比亚迪车型爬虫”“全国新能源销量爬虫”),设置爬取规则(如按页面链接层级递归爬取),支持定时任务(如每日凌晨爬取最新销量数据)。对于动态加载页面(如 JavaScript 渲染的用户评价),结合 Requests + Selenium 模拟浏览器操作,获取异步加载数据(如 “某车型的 1000 条用户口碑”)。​
    反爬与稳定性处理​
    针对目标网站的反爬机制(如 IP 封锁、验证码),集成多种应对策略:​
    代理 IP 池(通过第三方服务获取动态 IP,轮流发送请求,避免单一 IP 被封);​
    随机 User-Agent(模拟不同浏览器请求,降低识别风险);​
    爬取频率控制(设置请求间隔 1-3 秒,避免触发网站反爬阈值);​
    异常重试机制(请求失败时自动重试 3 次,记录失败 URL 后续补爬)。​
    多源数据采集范围​
    覆盖新能源汽车全维度数据:​
    车型基础数据:车企官网的车型名称、续航里程、充电时间、价格、配置参数(如 “比亚迪汉 EV 2024 款续航 715km”);​
    市场动态数据:第三方平台的销量排名(月度 / 年度)、成交价(含补贴后价格)、区域销量分布(如 “广东省 10 月新能源销量占全国 15%”);​
    用户反馈数据:汽车论坛、电商平台的用户评价(如 “续航达成率”“充电便利性”)、投诉信息(如 “电池故障”“车机卡顿”);​
    政策环境数据:政府官网的补贴政策(如 “2024 年新能源购车补贴标准”)、充电桩建设数据(如 “全国公共充电桩数量及分布”)。​
  2. 数据处理与存储层​
    数据清洗与预处理:Pandas + NumPy​
    爬取的原始数据常存在重复(如同一车型在不同页面的重复记录)、缺失(如部分车型未标注快充时间)、格式错误(如价格单位混乱)等问题。通过 Pandas 进行清洗:​
    去重(按 “车型 ID + 发布时间” 删除重复数据);​
    补全(对缺失的续航数据,用同级别车型平均值填充或标记 “数据缺失”);​
    标准化(统一单位,如将 “续航里程” 统一转换为 “km”,价格转换为 “万元”);​
    特征提取(从用户评价文本中提取关键词,如 “从‘续航扎实,冬天掉电少’中提取‘续航稳定性’特征”)。​
    存储方案:MySQL + MongoDB + Redis​
    MySQL:存储结构化数据(如车型参数、销量统计),设计数据表(如 “models” 表存车型信息,“sales” 表存销量数据),通过索引(如车型名称、日期)提升查询效率;​
    MongoDB:存储非结构化 / 半结构化数据(如用户评价文本、爬取的原始 HTML 页面),支持灵活的文档结构(如一条评价可包含 “用户 ID、内容、评分、时间、点赞数” 等动态字段);​
    Redis:缓存热门数据(如 “近 7 日销量 TOP10 车型”)、爬虫任务队列(待爬 URL),减少数据库访问压力,确保可视化页面加载速度(如 “销量趋势图” 秒级渲染)。​
  3. 分析与可视化层​
    数据分析:Pandas + Matplotlib + Scikit-learn(可选)​
    基础分析:通过 Pandas 计算销量增长率(如 “某品牌 Q3 销量同比增长 30%”)、参数对比(如 “不同车型的续航与价格相关性”);​
    高级分析(可选):结合 Scikit-learn 进行机器学习建模(如用线性回归预测某车型的未来销量,基于用户评价的情感分析 —— 判断 “正面 / 负面评价占比”)。​
    可视化展示:Flask + ECharts + Plotly​
    Flask 作为 Web 框架,搭建可视化展示平台(支持 PC 端和移动端)。后端将分析结果(如 DataFrame 数据)转换为 JSON 格式,前端通过 ECharts 绘制交互式图表:​
    折线图(展示 “近 12 个月全国新能源汽车销量趋势”);​
    柱状图(对比 “不同品牌的月度销量”);​
    散点图(分析 “续航里程与价格的关系”);​
    热力图(展示 “各省份充电桩分布密度”)。​
    对复杂数据(如车型参数对比),使用 Plotly 生成动态图表(支持鼠标悬停查看详情、缩放交互),增强数据可读性。​
  4. 架构特点​
    采用 “采集 - 处理 - 分析 - 展示” 分层架构,各模块松耦合(如爬虫模块可独立运行,数据处理不依赖可视化层)。支持横向扩展:​
    爬虫节点可增加(如新增 “特斯拉车型爬虫”“欧洲市场销量爬虫”);​
    存储层可扩容(MySQL 主从分离、MongoDB 分片存储,应对数据量增长);​
    可视化层可定制(根据用户需求增加图表类型,如车企专属的 “竞品分析看板”)。​
    三、核心功能模块​
  5. 多源数据采集模块​
    车型参数采集​
    定向爬取主流车企官网(比亚迪、特斯拉、蔚来等)及垂直平台(汽车之家、懂车帝)的车型数据:​
    基础参数:车型名称、指导价、续航里程(CLTC/NEDC)、电池容量、充电时间(快充 / 慢充)、电机功率;​
    配置信息:智能驾驶功能(如 “是否带 L2 级辅助驾驶”)、内饰材质、座椅功能(如 “加热 / 通风”);​
    车型迭代记录:历史款型参数对比(如 “2023 款与 2024 款某车型的续航提升幅度”)。​
    市场动态采集​
    实时爬取销量及政策数据:​
    销量数据:全国 / 各省份月度销量、品牌销量排名、车型销量 TOP10(如 “2024 年 9 月比亚迪海豚销量 2.5 万辆”);​
    价格动态:车型终端售价(含补贴后价格)、优惠活动(如 “某车型限时降价 1 万元”);​
    政策数据:各城市购车补贴、新能源牌照政策、充电桩建设规划(如 “上海市 2024 年新增充电桩 5000 个”)。​
    用户反馈采集​
    爬取公开平台的用户评价与投诉:​
    正面评价:如 “续航真实,高速能跑 400km”“车机流畅”;​
    负面反馈:如 “充电接口松动”“冬季续航打 7 折”;​
    投诉焦点:从车质网等平台采集投诉数据(如 “某品牌电池故障投诉量占比 30%”)。​
  6. 数据清洗与管理模块​
    自动化清洗流程​
    系统按预设规则自动处理原始数据:​
    格式标准化(如将 “续航 500 公里”“续航 500km” 统一为 “500km”);​
    异常值处理(如 “某车型标注续航 10000km”,判定为错误并剔除);​
    关联整合(将 “车型参数” 与 “销量数据” 通过 “车型 ID” 关联,形成 “销量 - 参数” 关联表)。​
    人工干预与数据校验​
    管理员可通过后台查看清洗日志(如 “今日爬取 1000 条数据,清洗后保留 850 条”),对标记为 “可疑” 的数据(如 “销量波动异常”)进行人工校验(如对比官方发布数据修正);支持手动上传补充数据(如车企未公开的内部数据),完善数据集。​
  7. 数据分析与可视化模块​
    车型对比分析​
    用户选择 2-3 款车型(如 “比亚迪汉 EV vs 特斯拉 Model 3”),系统自动生成对比报告:​
    参数对比:以表格 + 雷达图展示续航、价格、配置等核心指标(如 “汉 EV 续航 715km,Model 3 续航 615km”);​
    销量对比:折线图展示近 6 个月销量走势(如 “汉 EV 月均销量高于 Model 3 20%”);​
    用户评价对比:词云图展示正面 / 负面关键词(如汉 EV 的 “空间大” vs Model 3 的 “操控好”)。​
    市场趋势洞察​
    系统自动生成多维度趋势分析:​
    销量趋势:全国 / 区域新能源汽车销量年度 / 月度变化(如 “2024 年 1-9 月全国销量同比增长 45%”);​
    品牌竞争格局:饼图展示各品牌市场份额(如 “比亚迪占比 35%,特斯拉占比 15%”);​
    参数进化趋势:折线图展示近 3 年主流车型的续航提升(如 “平均续航从 2022 年的 400km 提升至 2024 年的 600km”)。​
    用户反馈分析​
    对用户评价进行情感分析和关键词提取:​
    情感倾向:柱状图展示某车型的正面(70%)、中性(20%)、负面(10%)评价占比;​
    关注焦点:词云图突出高频提及的关键词(如 “续航”“充电”“车机”);​
    问题追踪:折线图展示某类投诉的变化(如 “某车型的车机卡顿投诉量逐月下降”)。​
    政策与市场关联分析​
    分析政策对市场的影响(如 “某城市推出补贴后,当地销量环比增长 30%”),以时间轴 + 柱状图展示政策发布时间与销量变化的关联性,为政策制定者提供参考。​
  8. 数据导出与共享模块​
    报告导出与定制​
    支持导出分析结果为 Excel(原始数据)、PDF(图文报告)、图片(图表);企业用户可定制报告模板(如添加 logo、特定指标),定期生成自动化报告(如 “每周新能源市场简报”)。​
    数据接口共享​
    开放 API 接口(如 “销量数据 API”“车型参数 API”),支持第三方平台调用(如车企官网嵌入销量趋势图);通过权限控制接口访问范围(如公开接口提供基础数据,付费接口提供深度分析数据)。​
    四、系统核心优势​
    数据采集全面且自动化​
    替代 “人工从多个平台复制粘贴数据”,爬虫自动采集多源信息(日均可爬取 1-5 万条数据),覆盖从车型参数到用户反馈的全维度数据,数据更新频率提升至 “日级”(传统人工方式为 “周级 / 月级”)。​
    分析可视化直观易懂​
    将复杂数据转化为图表(如雷达图、词云图),用户无需专业知识即可快速理解(如 “通过销量趋势图一眼看出某品牌增长迅猛”);交互功能(如点击图表查看详情)提升探索效率。​
    灵活适配不同用户需求​
    消费者用 “车型对比” 功能选车,研究者用 “趋势分析” 做课题,车企用 “竞品分析” 优化产品,政策制定者用 “政策影响分析” 调整策略;支持按需定制模块(如车企增加 “供应链数据采集”)。​
    反爬与稳定性保障​
    多策略应对反爬,爬虫稳定性达 90%(如 “连续 30 天无间断运行”);数据清洗机制确保数据质量(有效数据保留率>80%),避免 “垃圾数据” 误导分析。​
    技术门槛低,扩展性强​
    Python 生态工具成熟(如 Scrapy、Pandas),开发与维护成本低于传统系统;模块化设计支持新增数据源(如海外市场数据)、新分析维度(如 “电池寿命与充放电习惯关联分析”)。​
    五、应用场景与价值​
    消费者购车决策​
    消费者想购买 20 万左右的新能源轿车,通过系统筛选出 5 款候选车型;对比参数后聚焦 “比亚迪汉 EV” 和 “小鹏 P7”,查看销量趋势(汉 EV 更稳定)和用户评价(汉 EV 的 “空间” 评价更高);结合价格优惠信息(汉 EV 有地区补贴),最终做出购车选择。​
    车企竞品分析​
    某新势力车企通过系统监控竞品动态:发现 “特斯拉 Model Y 近期降价 1.5 万元”,销量环比增长 25%;分析用户评价发现 “降价后‘性价比’成为正面关键词”;据此调整自家车型的定价策略和营销重点(如强调 “配置优于 Model Y”)。​
    行业研究与政策制定​
    新能源汽车协会研究者通过系统分析近 3 年数据,发现 “续航>600km 的车型销量占比从 10% 提升至 40%”,推断 “长续航是用户核心需求”;政策制定者参考充电桩分布数据(如 “三四线城市覆盖率低”),制定 “向三四线城市倾斜的充电桩补贴政策”。​
    对消费者,购车决策更理性(基于数据而非广告);对车企,竞品动态和用户需求洞察更及时(响应速度提升 50%);对行业,数据驱动的趋势分析推动技术迭代(如车企加大长续航电池研发);对政策,精准施策提升资源利用率(如补贴向高需求地区倾斜)。通过 Python 爬虫与数据分析技术的结合,该系统成为新能源汽车领域的 “数据洞察引擎”,让数据真正服务于决策。

三、核心代码

部分代码:

package com.controller;


import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("config")
@RestController
public class ConfigController{
	
	@Autowired
	private ConfigService configService;

	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params));
        return R.ok().put("data", page);
    }
    
	/**
     * 列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 根据name获取信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }
    
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);
    	configService.insert(config);
        return R.ok();
    }

    /**



四、效果图

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五 、资料获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐