
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預測景點擁擠度旅游路線推薦基于游客停留時間生成個性化路線考慮山城地形方言情感分析專門處理霸道、不擺了等特色評價詞我在項目上線后發現個有趣現象工作日的長江索道熱度反而高于周末因為本地人通勤也會使用。這提醒我們做旅游數據分析時不能簡單套用其他城市的模型。