请基于python爬取豆瓣top250数据并对该数据进行至少3种可视化
时间: 2023-09-12 09:10:19 浏览: 137
基于Python的豆瓣top250电影爬虫与数据可视化分析设计源码
5星 · 资源好评率100%
好的,这里提供一个使用 Python 爬取豆瓣 Top250 电影数据并进行三种可视化的示例。
首先,我们需要安装需要用到的库:
```python
!pip install requests
!pip install beautifulsoup4
!pip install pandas
!pip install matplotlib
!pip install seaborn
```
然后,我们可以使用以下代码来爬取豆瓣 Top250 电影数据:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 发送请求并解析 HTML 页面
url = 'https://movie.douban.com/top250'
movies = []
for i in range(10):
start = i * 25
response = requests.get(url, params={'start': start, 'filter': ''})
soup = BeautifulSoup(response.text, 'html.parser')
movie_list = soup.find('ol', class_='grid_view').find_all('li')
for movie in movie_list:
title = movie.find('div', class_='hd').find('span', class_='title').text
info = movie.find('div', class_='bd').p.text.strip().split('\n')
rating = movie.find('div', class_='star').find('span', class_='rating_num').text
summary = movie.find('div', class_='bd').find('span', class_='inq').text
movie_data = {
'Title': title,
'Director': info[0][4:],
'Year': info[1][:-6],
'Country': info[2][4:],
'Genres': info[2][4:].split('/'),
'Rating': rating,
'Summary': summary,
}
movies.append(movie_data)
# 将数据存储到 Pandas 数据框中
df = pd.DataFrame(movies)
```
在上面的代码中,我们使用了 requests 和 BeautifulSoup 库来发送请求并解析 HTML 页面,然后将数据存储到 Pandas 数据框中。
接下来,我们可以使用 Matplotlib 和 Seaborn 两个库来进行三种不同的可视化。
第一种可视化:电影评分分布直方图
```python
import matplotlib.pyplot as plt
# 绘制电影评分分布直方图
plt.hist(df['Rating'].astype(float), bins=20)
plt.xlabel('Rating')
plt.ylabel('Count')
plt.title('Movie Rating Distribution')
plt.show()
```
第二种可视化:电影类型条形图
```python
# 统计电影类型
genres_count = {}
for genres in df['Genres']:
for genre in genres:
if genre in genres_count:
genres_count[genre] += 1
else:
genres_count[genre] = 1
# 绘制电影类型条形图
plt.bar(genres_count.keys(), genres_count.values())
plt.xlabel('Genres')
plt.ylabel('Count')
plt.title('Movie Genres')
plt.show()
```
第三种可视化:电影年份折线图
```python
import seaborn as sns
# 统计电影年份
year_count = df['Year'].value_counts().sort_index()
# 绘制电影年份折线图
sns.lineplot(x=year_count.index, y=year_count.values)
plt.xlabel('Year')
plt.ylabel('Count')
plt.title('Movie Year')
plt.show()
```
以上三种可视化分别是电影评分分布直方图、电影类型条形图和电影年份折线图。您可以自由地修改代码来生成其他类型的图表。
阅读全文