python爬取豆瓣电影top250存入csv并数据可视化
时间: 2023-08-05 12:51:12 浏览: 171
好的,我可以为您提供一个大致的思路:
1.使用Python的requests和BeautifulSoup库爬取豆瓣电影top250的页面数据,提取出电影的名称、评分、导演、主演、年份、地区、类型等信息。
2.将提取出的电影信息存储到CSV文件中,可以使用Python的csv库。
3.使用Python的pandas库读取CSV文件,进行数据清洗和处理,如去重、填充空值等。
4.使用Python的matplotlib库或seaborn库进行数据可视化,实现电影评分分布图、电影类型占比图、电影地区分布图等。
下面是一个简单的示例代码,仅供参考:
```python
import requests
from bs4 import BeautifulSoup
import csv
import pandas as pd
import matplotlib.pyplot as plt
# 爬取豆瓣电影top250的页面数据
url = 'https://movie.douban.com/top250'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取电影信息并存储到CSV文件中
movies = []
for item in soup.find_all('div', class_='item'):
movie = []
movie.append(item.find('span', class_='title').text)
movie.append(item.find('span', class_='rating_num').text)
movie.append(item.find('p', class_='').text.strip().split('\n')[0].split(':')[-1])
movie.append(item.find('p', class_='').text.strip().split('\n')[1].strip().split('/')[0])
movie.append(item.find('p', class_='').text.strip().split('\n')[1].strip().split('/')[1])
movie.append(item.find('p', class_='').text.strip().split('\n')[1].strip().split('/')[2])
movie.append(item.find('p', class_='').text.strip().split('\n')[1].strip().split('/')[3])
movies.append(movie)
with open('movies.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['电影名称', '电影评分', '导演', '主演', '年份', '地区', '类型'])
for movie in movies:
writer.writerow(movie)
# 读取CSV文件,进行数据清洗和处理
df = pd.read_csv('movies.csv')
df = df.drop_duplicates(subset=['电影名称'])
df['年份'] = df['年份'].str.strip()
df['类型'] = df['类型'].str.strip()
# 数据可视化
# 电影评分分布图
plt.hist(df['电影评分'], bins=20)
plt.xlabel('电影评分')
plt.ylabel('电影数量')
plt.show()
# 电影类型占比图
df['类型'].value_counts().plot(kind='pie', autopct='%1.1f%%')
plt.axis('equal')
plt.legend(bbox_to_anchor=(1.2, 1))
plt.show()
# 电影地区分布图
df['地区'].value_counts().plot(kind='bar')
plt.xlabel('地区')
plt.ylabel('电影数量')
plt.show()
```
以上代码仅提供了基本的爬取、数据处理和数据可视化功能,您可以根据自己的需求进行修改和优化。
阅读全文