美食网站设计模板,wordpress虚拟币插件,建程网下载安装,wordpress运行环境要求一、项目背景与目标
携程作为中国领先的在线旅行服务平台#xff0c;提供了丰富的机票预订服务。其国际机票价格受多种因素影响#xff0c;包括季节、节假日、航班时刻等。通过抓取携程国际机票价格数据#xff0c;我们可以进行价格趋势分析、性价比评估以及旅行规划建议等…
一、项目背景与目标
携程作为中国领先的在线旅行服务平台提供了丰富的机票预订服务。其国际机票价格受多种因素影响包括季节、节假日、航班时刻等。通过抓取携程国际机票价格数据我们可以进行价格趋势分析、性价比评估以及旅行规划建议等。
本项目的目标是
利用Python爬虫技术抓取携程国际机票价格数据。对抓取的数据进行清洗和存储。进行数据分析包括价格趋势、热门航线等。提供可视化结果帮助用户直观了解机票价格动态。
二、 爬虫实现步骤
1 目标分析
携程国际机票页面如 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);flights.ctrip.com/font**通常采用动态加载数据可能通过AJAX请求返回JSON格式。我们需要
分析网页请求使用浏览器开发者工具F12查看XHR请求。模拟请求构造合理的请求头Headers和参数Params。解析数据提取航班号、出发/到达时间、航空公司、价格等信息。
2 代码实现
(1) 安装依赖
(2) 获取机票数据静态页面方案
如果携程的机票数据可以直接通过HTML获取部分旧版页面适用可以使用 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);requests Beautifu/font**
import requests
from bs4 import BeautifulSoup
import pandas as pddef scrape_ctrip_flights(departure, arrival, date):url fhttps://flights.ctrip.com/international/{departure}-{arrival}?depdate{date}headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36}response requests.get(url, headersheaders)soup BeautifulSoup(response.text, html.parser)flights []for flight in soup.select(.flight-item):airline flight.select_one(.airline-name).text.strip()departure_time flight.select_one(.depart-time).text.strip()arrival_time flight.select_one(.arrival-time).text.strip()price flight.select_one(.price).text.strip()flights.append({Airline: airline,DepartureTime: departure_time,ArrivalTime: arrival_time,Price: price})return pd.DataFrame(flights)# 示例抓取上海到东京的2023-12-01航班
df scrape_ctrip_flights(SHA, TYO, 2023-12-01)
print(df.head())(3) 动态页面抓取Selenium方案
如果数据是动态加载的需使用 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);Selenium/font** 模拟浏览器操作
from selenium import webdriver
from selenium.webdriver.common.by import By
import timedef scrape_ctrip_dynamic(departure, arrival, date):driver webdriver.Chrome() # 需安装ChromeDriverurl fhttps://flights.ctrip.com/international/{departure}-{arrival}?depdate{date}driver.get(url)time.sleep(5) # 等待页面加载flights []for flight in driver.find_elements(By.CSS_SELECTOR, .flight-item):airline flight.find_element(By.CSS_SELECTOR, .airline-name).textdeparture_time flight.find_element(By.CSS_SELECTOR, .depart-time).textarrival_time flight.find_element(By.CSS_SELECTOR, .arrival-time).textprice flight.find_element(By.CSS_SELECTOR, .price).textflights.append({Airline: airline,DepartureTime: departure_time,ArrivalTime: arrival_time,Price: price})driver.quit()return pd.DataFrame(flights)# 示例动态抓取数据
df scrape_ctrip_dynamic(SHA, TYO, 2023-12-01)
print(df.head())(4) 反爬策略
携程可能有反爬机制需采取以下措施
随机User-Agent避免被识别为爬虫。IP代理池防止IP被封禁。请求间隔避免高频访问。
示例使用 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);fake_useragent/font** 和代理
from fake_useragent import UserAgent
import requests# 初始化UserAgent对象
ua UserAgent()# 设置请求头
headers {User-Agent: ua.random,Accept-Language: en-US,en;q0.9
}# 设置代理信息
proxyHost www.16yun.cn
proxyPort 5445
proxyUser 16QMSOML
proxyPass 280651# 构造代理服务器的认证信息
proxy_auth f{proxyUser}:{proxyPass}# 构造代理服务器的URL
proxies {http: fhttp://{proxy_auth}{proxyHost}:{proxyPort},https: fhttps://{proxy_auth}{proxyHost}:{proxyPort}
}# 目标URL
url https://example.com # 替换为你的目标URL# 发送请求
response requests.get(url, headersheaders, proxiesproxies)# 打印响应内容
print(response.text)三、 数据分析与可视化
(1) 数据清洗
# 转换价格格式如 ¥2,500 → 2500
df[Price] df[Price].str.replace(¥, ).str.replace(,, ).astype(float)# 按价格排序
df_sorted df.sort_values(Price)
print(df_sorted.head())(2) 价格分布可视化
import matplotlib.pyplot as plt
import seaborn as snsplt.figure(figsize(10, 6))
sns.histplot(df[Price], bins20, kdeTrue)
plt.title(International Flight Price Distribution (Shanghai to Tokyo))
plt.xlabel(Price (¥))
plt.ylabel(Frequency)
plt.show()(3) 航空公司价格对比
plt.figure(figsize(12, 6))
sns.boxplot(xAirline, yPrice, datadf)
plt.xticks(rotation45)
plt.title(Flight Price Comparison by Airline)
plt.show()四.、结论
本文介绍了如何使用Python爬取携程国际机票数据并进行分析与可视化。关键点包括
网页分析确定数据加载方式静态/动态。爬虫实现使用 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);Requests/font** 或 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);Selenium/font** 抓取数据。反爬策略合理设置请求头、代理和访问频率。数据分析利用 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);Pandas/font** 和 **font stylecolor:rgb(64, 64, 64);background-color:rgb(236, 236, 236);Matplotlib/font** 进行价格趋势分析。