简介:本文详细介绍如何使用Python实现机票价格查询,涵盖爬虫获取数据、API调用、数据清洗与可视化分析的全流程,适合开发者及数据分析爱好者。
在数字化时代,机票价格波动频繁,如何高效获取并分析价格趋势成为旅行者和企业差旅管理的关键需求。Python凭借其丰富的库生态(如requests、BeautifulSoup、pandas等),可实现从数据抓取到可视化分析的全流程自动化。本文将系统阐述如何利用Python完成机票价格查询,涵盖爬虫技术、API调用、数据清洗及可视化分析,为开发者提供可落地的解决方案。
适用场景:当目标平台未提供API时,可通过爬虫解析网页结构获取数据。
技术实现:
requests发送HTTP请求,模拟浏览器行为。 BeautifulSoup或lxml解析HTML,提取价格、航班号等信息。 User-Agent伪装、IP代理池(如scrapy-proxies)和请求间隔(time.sleep)规避封禁。url = “https://example-flight-site.com/search?from=PEK&to=SHA“
headers = {“User-Agent”: “Mozilla/5.0”}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, “html.parser”)
prices = [p.text for p in soup.select(“.price”)] # 假设价格在class=”price”的标签中
**局限性**:网页结构变更可能导致解析失败,需定期维护代码。#### 2. API调用:高效获取结构化数据**适用场景**:平台提供官方API(如携程、去哪儿),数据更稳定且合法。**技术实现**:- **认证方式**:OAuth 2.0或API Key(需注册开发者账号)。- **库支持**:`requests`发送JSON请求,`json`模块解析响应。**示例代码**:```pythonimport requestsapi_key = "your_api_key"url = "https://api.example-flight.com/v1/prices"params = {"origin": "PEK","destination": "SHA","date": "2024-12-25","api_key": api_key}response = requests.get(url, params=params)data = response.json() # 直接获取字典格式数据
优势:数据格式规范,更新频率低,适合长期监控。
适用场景:短期分析或小型项目。
技术实现:
pandas的to_csv()或to_excel()方法。df = pd.DataFrame({“Flight”: [“CA123”], “Price”: [800]})
df.to_csv(“flights.csv”, index=False)
#### 2. 数据库:规模化存储**适用场景**:长期监控或多维度分析。**技术实现**:- **SQLite**:轻量级,适合单机应用。- **MySQL/PostgreSQL**:支持高并发,适合分布式系统。**示例代码(SQLite)**:```pythonimport sqlite3conn = sqlite3.connect("flights.db")cursor = conn.cursor()cursor.execute("CREATE TABLE IF NOT EXISTS flights (id INTEGER PRIMARY KEY, flight TEXT, price REAL)")cursor.execute("INSERT INTO flights (flight, price) VALUES (?, ?)", ("CA123", 800))conn.commit()conn.close()
技术实现:
pandas的dropna()删除缺失值,fillna()填充均值。 describe()统计或箱线图识别。
df = pd.read_csv("flights.csv")df = df.dropna(subset=["Price"]) # 删除Price为空的行df["Price"] = df["Price"].apply(lambda x: x if x > 0 else None) # 过滤负价格
技术实现:
dates = [“2024-12-20”, “2024-12-21”, “2024-12-22”]
prices = [800, 850, 780]
plt.plot(dates, prices, marker=”o”)
plt.title(“Price Trend: PEK to SHA”)
plt.xlabel(“Date”)
plt.ylabel(“Price (CNY)”)
plt.show()
### 四、自动化与扩展:定时任务与机器学习#### 1. 定时任务:自动化监控**技术实现**:- **APScheduler**:定时运行爬虫或API调用。- **Cron**(Linux)或**任务计划程序**(Windows):系统级定时。**示例代码(APScheduler)**:```pythonfrom apscheduler.schedulers.blocking import BlockingSchedulerdef fetch_prices():print("Fetching prices...") # 替换为实际爬虫/API代码scheduler = BlockingScheduler()scheduler.add_job(fetch_prices, "interval", hours=6) # 每6小时执行一次scheduler.start()
适用场景:预测未来价格走势,辅助决策。
技术实现:
X = np.array([1, 2, 3]).reshape(-1, 1)
y = np.array([800, 850, 780])
model = LinearRegression()
model.fit(X, y)
print(f”Predicted price for day 4: {model.predict([[4]])[0]}”)
```
robots.txt,避免高频请求导致服务器过载。 Python在机票价格查询领域展现了强大的灵活性,从爬虫到API调用,再到数据分析与自动化,均可通过标准库或第三方工具高效实现。开发者应根据项目需求选择合适的技术栈:短期分析可优先使用爬虫+CSV,长期监控建议结合API+数据库,而价格预测则需引入机器学习模型。未来,随着AI技术的普及,基于NLP的航班推荐系统或成为下一阶段的研究热点。