基于 Python 的文轩网图书数据分析与价格预测系统:从爬虫到大屏的完整实践

有需要本项目的代码、文档、完整资源,或者需要部署调试的朋友,可以私信博主。

一、为什么做这个项目

做这个项目的最初想法很直接:图书电商平台上沉淀了大量书籍信息,但这些信息通常分散在列表页、详情页、价格区、规格参数和库存状态里。如果只是逐条浏览,很难看清图书市场的结构;如果只做简单表格,又缺少交互展示和持续更新能力。因此,我把文轩网图书数据作为切入口,围绕"采集、清洗、分析、可视化、预测、系统集成"搭建了一套完整的数据分析系统。

这个项目不是只生成几张静态图,也不是单纯写一个爬虫脚本,而是希望把一个真实数据场景做成可运行、可展示、可二次开发的 Web 系统。读者可以从页面看到图书价格、折扣、作者、出版社、库存、出版时间等维度的变化,也可以通过预测页面输入图书特征,对原价进行估算。对课程设计、毕业设计、数据分析练习、Python 爬虫综合项目和可视化大屏展示来说,这类项目的完整度会更高。

图 1 项目整体流程展示

二、整体技术路线

整个系统按照工程化思路拆成六个部分:第一步是数据采集,使用 Python、requests 和 lxml 对文轩网页面进行解析;第二步是数据预处理,把网页上的非结构化字段统一成可计算、可入库的数据;第三步是 MySQL 存储与 SQL 聚合分析,建立主表和多张分析结果表;第四步是 Pyecharts 和 ECharts 可视化,输出柱状图、折线图、饼图、词云图等图表;第五步是 CatBoost 价格预测模型,把图书特征转化为机器学习输入;第六步是 Flask + Layui 系统集成,形成用户端、管理员端、预测端和数据大屏。

这条路线的关键不在于某一个单点技术有多复杂,而在于每一环都能衔接起来。爬虫采集到的数据要能进入清洗脚本,清洗后的字段要能写入数据库,数据库里的统计结果要能被前端图表调用,机器学习模型也要能嵌入页面流程。这样做完以后,项目就不只是代码片段,而是一个可以完整演示的图书数据分析平台。

图 2 数据来源与页面结构展示

三、数据采集:从列表页到详情页

文轩网的图书数据分布比较典型:列表页负责展示商品缩略信息,详情页保存更完整的规格参数。为了尽量拿到完整字段,我采用两阶段抓取方式。程序先根据 categoryId 和 currentPage 构造列表页地址,解析每一页商品的 product_id、标题、价格和详情页链接;拿到详情链接后,再进入详情页提取作者、出版社、出版日期、页数、字数、装帧、语种、库存、促销信息等字段。

列表页解析主要依赖 XPath 定位,详情页则要处理页面结构不统一的问题。有些规格字段写在列表元素里,有些字段中间夹杂全角空格、中文冒号或不规则文本。为了降低字段错位,我在采集阶段就加入了字段名规范化处理,把异常格式统一成稳定的字段名。这样后续入库和分析时,不需要再反复猜测每一列到底代表什么。

爬虫稳定性也做了专门处理。程序在翻页、详情页访问和批量抓取之间都加入随机延迟,并设置失败重试机制,避免因为网络波动或访问过快导致任务中断。更重要的是断点续爬:每次启动脚本时会读取已有 CSV 中的 product_id,已经采过的数据自动跳过。这样即使中途关闭程序,下次也可以接着跑,不必从第一页重新开始。

图 3 爬虫运行日志与原始数据展示

四、数据清洗:把网页文本变成可分析字段

原始网页数据不能直接拿来分析。比如折扣字段可能写成"6.9 折",也可能为空;字数字段可能是"100 千字""12.5 万字",也可能是普通数字;作者字段可能带有"著""编"等角色标识;标题字段里偶尔还会混入特殊符号。为了避免这些问题影响统计结果,我把清洗流程拆成多个小函数,对折扣、作者、页数、字数、版次、印次、出版日期、标题等字段逐一处理。

折扣字段通过正则提取数字后转为浮点数;作者字段保留第一个主要作者,降低重复统计;字数字段根据"千、万、百万"等单位自动换算;页数、版次、印次转为整数;日期字段将"无"这类占位文本转为空值,方便 SQL 查询时过滤;标题字段则清理 emoji、控制字符和不可见字符,避免 MySQL 入库时报错。

清洗不是为了让数据看起来更整齐,而是为了让分析结果更可信。字段一旦标准化,后面无论做价格区间统计、作者销量排序、出版社对比,还是训练价格预测模型,都可以直接调用同一套口径。这个环节虽然不如大屏展示直观,但它决定了整个项目的上限。

图 4 数据清洗与字段标准化展示

五、数据存储与系统架构

数据存储采用 CSV + MySQL 的组合方式。CSV 适合保留原始采集结果,方便人工查看和调试;MySQL 则用于正式分析、系统查询和前端展示。数据库中建立了 wenxuan_data 主表,用于保存清洗后的图书明细,同时围绕统计分析建立多张结果表,支撑不同维度的图表接口。

MySQL 的好处在于查询表达清晰。像价格区间、折扣区间、出版社销量排名、作者 Top 榜、库存状态统计、出版时间趋势等指标,都可以用 SQL 完成聚合。相比每次都在 Python 里重新读 CSV 并循环处理,数据库方案更适合 Web 系统持续调用,也方便管理员后续做数据更新、编辑和删除。

系统架构上,我把前后端和分析层分开组织。后端负责用户登录、权限控制、数据查询、模型预测和接口返回;前端负责页面展示、表格交互、图表渲染和预测输入;数据分析层负责提前计算统计指标;机器学习模块独立保存模型和特征处理逻辑。这样的结构后期扩展起来比较自然,比如增加新的图表、替换模型、接入更多分类数据,都不会牵一发动全身。

图 5 数据存储与系统架构展示

六、 Web 系统功能展示

系统采用 Flask 作为后端框架,Layui 负责页面组件和后台管理界面。用户端主要面向普通访问者,提供登录注册、首页展示、个人中心、图表浏览和价格预测等功能;管理员端主要负责用户管理、数据维护、图书信息新增、编辑、删除和状态查看。

登录和注册页面保持简洁,进入系统后可以看到主要功能入口。个人中心支持资料查看和修改,管理员页面以表格形式展示图书数据,并提供弹窗式新增和编辑。为了方便演示,我把核心操作都做成页面级交互,不需要读者打开数据库或命令行,也能完整体验系统流程。

图 6 用户端与管理员端页面展示

后台数据维护部分比较适合展示系统的"可用性"。很多数据分析项目只做到图表就结束,但真实系统里,数据会不断变化,管理员需要有入口处理异常记录、新增补充数据或修改字段。这个项目中,后台表格支持查看数据状态,新增和编辑操作通过弹窗完成,整体交互更接近一个完整的管理系统。

图 7 后台数据维护功能展示

七、可视化分析:用图表拆解图书市场

可视化部分围绕 29 项核心统计指标展开,最终生成了多种交互式图表。作者维度可以看到热门作者、作者相关价格和词云;出版社维度可以看到出版机构的数量结构、平均价格和综合表现;价格维度可以观察原价、售价、折扣和价格区间;出版维度可以追踪出版日期、印刷日期和趋势变化;规格维度则包括页数、字数、装帧、语种、库存状态等信息。

作者和出版社是图书市场最常见的两个观察角度。热门作者通常对应更强的用户关注度,出版社则代表内容供给和市场分布。通过柱状图、词云图和平均价格图,可以快速看出哪些主体更活跃,哪些名称在数据中出现频率更高。对于做图书推荐、市场分析或阅读推广的人来说,这些指标都很有参考意义。

图 8 作者与出版社维度分析展示

价格与折扣分析更偏向电商场景。系统可以展示不同价格区间的图书数量、平均售价变化、价格趋势和累计分布。把这些图放在一起看,能发现低价书、中价书和高价书的分布差异,也能看到折扣策略对消费者感知的影响。出版时间相关图表则帮助观察图书供给的时间结构,哪些年份的数据更密集,哪些阶段出现明显增长,都可以通过趋势线表现出来。

图 9 价格、折扣与出版时间分析展示

规格、装帧、语种和库存状态能够补充图书画像。一本书的市场表现并不只由价格决定,装帧形式、页数、字数、印刷次数、库存状态都可能影响购买行为。把这些字段可视化后,原本藏在详情页里的零散信息被转化成了可比较的结构,也让整个系统不局限于"销量榜"或"价格榜"这类单一视角。

图 10 规格、装帧与库存画像展示

八、数据大屏:适合汇报和展示的综合入口

除了普通页面图表,我还单独做了数据大屏。大屏更适合答辩、项目演示、课程汇报和企业展示场景,因为它能在一页里集中呈现核心指标、趋势图、Top 排名、词云、表格和结构图。大屏页面采用深色背景,重点数据通过卡片和多图联动呈现,视觉层次比普通后台页面更强。

大屏不是简单把图表堆在一起,而是围绕"市场总览---价格走势---出版社表现---销量排行---关键词---库存结构"的观看顺序来组织。顶部卡片展示总量、平均价格、累计销量、出版社数量等核心指标;中部放置可跳转详情的图书表格和词云;两侧展示趋势图、排行图和占比图。这样既有数据概览,也能保留继续深入查看的入口。

图 11 数据大屏展示

九、 CatBoost 价格预测模块

为了让项目不止停留在描述性分析,我加入了机器学习价格预测模块。模型选择 CatBoost 回归器,主要原因是图书数据里存在大量类别特征,比如作者、出版社、装帧、语种、库存状态等。CatBoost 对类别变量的处理比较友好,适合这种既有文本类别、又有数值字段的表格型数据。

建模时选取了 12 个关键特征,围绕售价、折扣、库存、页数、字数、版次、印次、作者、出版社、装帧等维度构建输入。训练前先做异常值过滤和基础特征工程,避免极端价格或缺失字段拉偏模型。模型训练完成后,通过 Flask 页面封装成预测服务,用户在前端输入图书特征,系统返回预测原价。原资料中的模型测试结果显示,模型在测试集上的 R² 达到 0.654,已经能够作为项目演示和价格辅助判断的基础。

这个预测模块的意义在于把数据分析从"看过去"延伸到"估未来"。虽然它不是商业级定价系统,但可以展示机器学习在图书电商场景中的落地方式,也方便后续继续接入更多样本、更多特征和更细的调参策略。

图 12 机器学习价格预测功能展示

十、项目总结与可扩展方向

做完整个系统后,我最大的感受是:一个数据分析项目真正有展示价值,必须把数据链路打通。爬虫只是入口,清洗决定质量,数据库决定可维护性,图表决定表达效果,Web 系统决定能否被普通用户使用,预测模块则决定项目是否具备进一步拓展空间。

后续如果继续优化,可以从三个方向推进。第一,增加更多分类和更长周期的数据,让价格趋势和库存变化更稳定;第二,加入评论、关键词、评分等文本与用户行为字段,让图书画像更立体;第三,继续优化机器学习模块,例如加入模型对比、特征重要性展示、误差分析和在线更新机制。这样项目就可以从课程级系统逐步升级为更完整的图书电商数据智能分析平台。

整体来看,这个项目适合用于 Python 爬虫、数据清洗、MySQL、Pyecharts、Flask、Layui、ECharts、CatBoost、数据大屏和机器学习预测等多个知识点的综合练习。它既能展示数据采集与分析能力,也能体现系统开发和工程整合能力。对于需要做项目展示、毕业设计、课程设计或作品集整理的朋友来说,这类完整项目会比单独的一段代码更有说服力。

每文一语

时间会慢慢证明一切,如果时间不是静止的