Python上海酒店爬虫数据可视化分析和推荐查询系统
随着互联网的发展,酒店预订和旅游行业的数据量急剧增加。为了帮助用户更好地选择适合自己的酒店,结合数据爬虫、数据可视化和推荐算法,我们可以构建一个针对上海酒店的推荐查询系统。本文将以Python为基础,介绍如何实现这一系统。
一、数据爬虫
我们首先通过爬虫从网站上获取上海酒店的信息。可以使用 requests
库进行网页请求,并用 BeautifulSoup
解析 HTML 内容。以下是一个简单的爬虫示例:
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 设置爬虫请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
}
# 爬取数据
def fetch_hotel_data(page):
url = f"https://example.com/shanghai_hotels?page={page}"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
hotels = []
for hotel in soup.select('.hotel-item'):
name = hotel.select_one('.hotel-name').text
price = hotel.select_one('.hotel-price').text.replace('¥', '').strip()
rating = hotel.select_one('.hotel-rating').text
hotels.append({'name': name, 'price': int(price), 'rating': float(rating)})
return hotels
# 获取前5页的酒店数据
all_hotels = []
for i in range(1, 6):
all_hotels.extend(fetch_hotel_data(i))
# 转换为DataFrame
hotel_df = pd.DataFrame(all_hotels)
hotel_df.to_csv('shanghai_hotels.csv', index=False)
二、数据可视化
利用 matplotlib
和 seaborn
库进行数据可视化,帮助用户了解酒店价格和评分分布。
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
hotel_df = pd.read_csv('shanghai_hotels.csv')
# 价格分布图
plt.figure(figsize=(10, 6))
sns.histplot(hotel_df['price'], bins=30, kde=True)
plt.title('上海酒店价格分布')
plt.xlabel('价格 (元)')
plt.ylabel('频率')
plt.show()
# 评分与价格关系图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=hotel_df, x='price', y='rating', alpha=0.6)
plt.title('酒店价格与评分关系')
plt.xlabel('价格 (元)')
plt.ylabel('评分')
plt.show()
三、推荐系统
接下来,我们可以使用简单的基于内容的推荐算法。根据用户选择的酒店,推荐相似的酒店。以下是根据评分和价格进行相似度计算的代码示例:
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.preprocessing import StandardScaler
# 特征标准化
scaler = StandardScaler()
hotel_features = scaler.fit_transform(hotel_df[['price', 'rating']])
# 计算相似度
similarity_matrix = cosine_similarity(hotel_features)
# 推荐函数
def recommend_hotel(hotel_name, top_n=5):
hotel_idx = hotel_df[hotel_df['name'] == hotel_name].index[0]
similar_indices = similarity_matrix[hotel_idx].argsort()[-top_n-1:-1][::-1]
return hotel_df.iloc[similar_indices]
# 示例:给出推荐
recommended_hotels = recommend_hotel('某酒店名')
print(recommended_hotels[['name', 'price', 'rating']])
四、总结
通过上述步骤,我们构建了一个简单的上海酒店爬虫数据可视化分析和推荐查询系统。这个系统涉及数据爬取、处理、可视化及推荐算法,可以为用户提供合理的酒店推荐,提升用户的体验。
当然,这只是一个简单的示例,实际应用中可能需要考虑更多的因素,如用户的偏好、酒店的地理位置等。此外,爬虫的实际应用也需遵循相关网站的使用条款,确保合法合规。希望这篇文章能为你在数据分析和推荐系统开发方面提供一些启发!