面向汽车市场销量榜单的分析系统:真实采集汽车之家「全车型销量总榜」12 个月 7786 条月度销量,完成价格区间解析、去重、CR10 与 HHI 集中度、价格带与能源结构分析,并给出「翻页失效 / 旧月份静默回退」两个采集陷阱的对比实验。第 21 套「工业规格书风」界面。
视频也可在 B 站视频页 观看
| 编程语言 | Python 3.8 及以上 |
|---|---|
| 后端框架 | Django 4.2 |
| 数据采集 | requests 真实 HTTP 采集 + Scrapy 2.x 工程骨架(公开接口,低频 + 重试 + 去重) |
| 数据分析 | pandas 2.0 / NumPy 1.23 |
| 数据库 | MySQL 8.0(交付默认 SQLite,免安装) |
| 可视化 | ECharts 5(已内置本地文件,离线可用) |
| 数据规模 | 7786 条月度销量 / 836 个车系 / 12 个月份 |
| 操作系统 | Windows / macOS / Linux |
| 启动方式 | 双击一键脚本,或 python manage.py runserver 8086 |
下面是交付包里的真实目录,共 67 个文件。只展示文件名,不含文件内容; 点击文件夹可逐层展开,看到每个模块是怎么拆分的。
点击任意一张可放大,支持左右切换(也可用键盘 ← → 键)










交付的任务书、开题报告与论文均为 Word 文档,下面是真实页面预览;点击可放大并左右切换:



是。通过汽车之家「全车型销量总榜」公开接口真实采集 2025-10 ~ 2026-09 共 7786 条月度销量,覆盖 836 个车系,原始 CSV 随包并可在页面下载。需要说明:这是榜单收录车型口径,每月约 624~678 个车系,不等于全国销量,也不等于上险量,页面与论文都如实标注。
榜单页是 Next.js 服务端渲染,只输出首页 20 条,翻页由前端调用接口完成。用 2026-09-2.html、?page=2 等后缀请求,返回的 pageindex 恒为 1,反复拿到同一批数据,而且不报错。系统的做法是直接对接页面自身调用的 getList 接口,pagesize 可设 50,12 个月共 13~14 页。
如果直接按页面 URL 请求 2026-04 之前的月份,服务端会静默回退成最新月数据,看起来有数据、字段也齐全。接口的 date 参数才真实生效:本系统逐月比对首条车系与销量(2025-10 宏光MINIEV 61506、2025-12 Model Y 65874、2026-09 Model Y 50359 等),确认 12 个月互异。
没算错。CR10 是前 10 名销量占榜单总量,本数据每月在榜 600 多个车系,份额被长尾摊得很薄;HHI 只有 59~74(对应约 135~170 个等规模主体),两个指标互相印证「高度分散」。1—2 月 CR10 升到 17% 是淡季长尾塌缩更快、分母变小造成的,3 月总量回升后立刻跌回 14.08%。
源站只提供 brandid,没有品牌名称,也没有品牌与车系的映射表。强行按 ID 合并,结论会随合并规则漂移(车系改名、子品牌拆分都会影响),无法向读者解释清楚。所以系统主动只做车系、价格带、能源三个维度,这是取舍不是缺失,论文 6.4 节写了理由。
不是。源站只有官方指导价区间,系统取区间下界(起售价)划分价格带并计算销量加权均价,描述的是「官方定价分布」。真实成交价、终端优惠数据源站不提供,因此页面不做成交均价推断。
7786 条月度销量、836 个车系、12 个月份,原始 CSV 约 480 KB,全期榜单总销量 2021.8 万辆。改 fetch_sales.py 的 MONTHS 列表可以扩到更早区间,但接口实测最早只到 2025-10。
能。python3 crawler/fetch_sales.py 重新采集(约 3~4 分钟),再 python3 manage.py import_sales 重建统计库与 findings.json,页面数字会一起更新;该命令幂等,每次先清空业务表再写入。
访客无需登录即可查看全部 9 个分析页面并下载 CSV;管理员通过 Django admin 维护车系主数据、月度销量与三张汇总表,并可查看采集日志(演示账号 admin / admin123456)。
端口占用换 8087;缺依赖执行 pip install -r requirements.txt;改了模板不生效需重启服务(Django 缓存模板);改了价格带配置必须重跑 import_sales。说明文档第八节给了完整对照表。