Python+Flask构建重庆旅游景点数据分析系统实战

发布时间:2026/8/10 3:34:56
Python+Flask构建重庆旅游景点数据分析系统实战 1. 项目概述重庆旅游景点数据分析系统去年夏天我接了个重庆本地旅行社的需求他们想通过数据手段了解各景点的实时热度、游客评价和交通状况。于是我用PythonFlask搭建了这个旅游景点数据分析系统核心功能包括爬虫数据采集、清洗存储、可视化展示三大模块。这个项目特别适合想学习Web数据分析全流程的Python开发者尤其是掌握基础语法后想实战Flask框架的朋友。系统从携程、美团等平台抓取重庆30热门景点的票价、评论、周边酒店等数据经过清洗后存入MySQL最后用ECharts生成动态图表。整个过程涉及Requests爬虫、Pandas数据处理、Flask路由设计等关键技术点下面我会详细拆解各模块的实现逻辑和踩坑经验。2. 核心架构设计2.1 技术栈选型理由Flask框架相比Django更轻量适合快速开发数据API路由定义仅需30行代码MySQL 8.0支持JSON字段存储爬取的原始数据方便后续扩展分析维度ECharts.js百度开源的动态图表库配合Pyecharts可生成热力图等复杂可视化Requests-HTML比Scrapy更简单的爬虫方案内置XPath和异步请求支持注意重庆景点数据有较强的地域特征需特别关注洪崖洞、长江索道等网红景点的数据波动2.2 系统流程图解数据流爬虫 → 数据清洗 → MySQL → Flask API → 前端展示 ↑____________定时任务___________↓3. 爬虫模块实现细节3.1 多平台数据抓取用Requests-HTML同时采集三个平台数据from requests_html import HTMLSession def crawl_ctrip(): session HTMLSession() url https://you.ctrip.com/sight/chongqing158.html r session.get(url, headersrandom_headers()) # 使用XPath提取景点评分 rating r.html.xpath(//div[classcommentScore]/span/text())[0] return float(rating.replace(分, ))关键参数说明random_headers()包含随机User-Agent的反反爬函数重庆景点页面的特殊处理需要模拟滑动验证码后续会讲破解方案3.2 数据清洗技巧原始数据常见问题点评中的重庆方言如巴适得板→5星票价包含季节性浮动冬季武隆景区有折扣GPS坐标有多种格式高德/百度/腾讯坐标系清洗代码示例def clean_price(text): # 处理¥198起这类字符串 return float(re.search(r¥(\d), text).group(1)) def convert_gps(gd_lat, gd_lng): # 高德坐标转百度坐标重庆地图专用 x_pi 3.14159265358979324 * 3000.0 / 180.0 x float(gd_lng) - 0.0065 y float(gd_lat) - 0.006 # ...省略坐标转换公式... return bd_lat, bd_lng4. Flask后端开发实录4.1 路由设计要点app.route(/api/scenic/int:id) def get_scenic_data(id): # 加入缓存机制应对重庆旅游旺季的高并发 cache_key fscenic_{id} data cache.get(cache_key) if not data: data db.query_scenic_by_id(id) cache.set(cache_key, data, timeout3600) return jsonify(data)性能优化技巧使用Redis缓存热门景点数据洪崖洞的QPS可达200针对磁器口等古镇类景点采用分页加载评论数据4.2 数据库模型class ScenicSpot(db.Model): __tablename__ chongqing_scenic id db.Column(db.Integer, primary_keyTrue) name db.Column(db.String(80), uniqueTrue) # 景点名称 heat_index db.Column(db.Float) # 热度指数 raw_data db.Column(db.JSON) # 原始爬虫数据 def __repr__(self): return f景点 {self.name}5. 可视化前端开发5.1 ECharts配置技巧重庆景点热力图配置示例option { tooltip: { formatter: function(params) { // 重庆方言特色提示框 return params.name 安逸指数 params.value[2] } }, visualMap: { pieces: [{ min: 0, max: 3, label: 人少, color: #50a3ba },{ min: 3, max: 6, label: 适中, color: #eac736 }] } }5.2 重庆特色数据展示网红景点打卡时段分析洪崖洞最佳拍摄时间在19:00-21:00轨道交通关联度显示各景点最近的地铁站重庆地形特殊需标注海拔方言词云图从评论中提取巴适、要得等特色词汇6. 部署与运维经验6.1 重庆服务器选择推荐腾讯云重庆机房延迟5ms注意备份策略每日凌晨3点自动备份避开旅游平台数据更新时段6.2 常见问题排查爬虫被封IP解决方案使用重庆本地ADSL拨号代理池验证方法ping you.ctrip.com -t观察延迟波动坐标偏移问题# 重庆地图纠偏参数与其他城市不同 CQ_OFFSET (0.0032, 0.0041)方言处理异常建立重庆方言词库{巴适:5, 麻麻鱼:2}7. 项目扩展方向实时人流预测接入重庆轨道交通API预测景点拥挤度旅游路线推荐基于游客停留时间生成个性化路线考虑山城地形方言情感分析专门处理霸道、不摆了等特色评价词我在项目上线后发现个有趣现象工作日的长江索道热度反而高于周末因为本地人通勤也会使用。这提醒我们做旅游数据分析时不能简单套用其他城市的模型。