您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python系列爬虫如何进行携程旅游景点数据爬取与可视化
## 一、引言
随着旅游行业的快速发展,旅游数据的获取与分析成为行业研究的重要方向。本文将通过Python爬虫技术,演示如何从携程旅行网爬取景点数据,并通过数据清洗、存储和可视化展示完整的数据分析流程。
## 二、技术准备
### 1. 核心工具
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
pip install requests beautifulsoup4 pandas matplotlib seaborn
携程景点页面的典型URL结构:
https://you.ctrip.com/sight/{城市ID}/{景点ID}.html
def get_scenic_spots(city_id, max_page=5):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
data_list = []
for page in range(1, max_page+1):
url = f'https://you.ctrip.com/sight/city{city_id}/s0-p{page}.html'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
for item in soup.select('.list_item'):
try:
name = item.select_one('.rdetailbox a').text.strip()
rating = item.select_one('.score .n').text
comments = item.select_one('.comment').text.replace('条点评','')
data_list.append([name, float(rating), int(comments)])
except Exception as e:
print(f"解析异常:{e}")
return pd.DataFrame(data_list, columns=['景点名称','评分','评论数'])
df.drop_duplicates(inplace=True)
df = df[df['评论数'] > 10] # 过滤低评论数据
# CSV存储
df.to_csv('ctrip_scenic_spots.csv', index=False)
# MySQL存储
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', database='travel')
df.to_sql('scenic_spots', conn, if_exists='replace')
plt.figure(figsize=(10,6))
sns.histplot(df['评分'], bins=20, kde=True)
plt.title('景点评分分布')
plt.savefig('rating_dist.png')
top10 = df.nlargest(10, '评论数')
plt.figure(figsize=(12,6))
sns.barplot(x='评论数', y='景点名称', data=top10)
plt.title('热门景点TOP10')
sns.jointplot(x='评分', y='评论数', data=df, kind='reg')
以北京为例(city_id=1):
beijing_df = get_scenic_spots(1, max_page=3)
print(f"共获取{len(beijing_df)}个景点数据")
# 生成可视化报告
beijing_df.describe().to_markdown()
输出结果示例:
评分 | 评论数 | |
---|---|---|
count | 142.0 | 142.0 |
mean | 4.56 | 3821.4 |
max | 5.0 | 125000 |
通过本案例可以掌握: - 旅游数据的获取方法 - 反爬虫应对策略 - 基础数据分析可视化技巧 - 完整的Python数据处理流程
完整代码已开源至GitHub(示例仓库地址),欢迎交流改进。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。