python爬取豆瓣电影top250并可视化分析
时间: 2023-06-05 08:47:06 浏览: 550
可以使用Python编写爬虫程序,爬取豆瓣电影Top250的数据,并将数据进行可视化分析。具体步骤包括:
1. 使用Python的requests库发送HTTP请求,获取豆瓣电影Top250的网页源代码。
2. 使用Python的BeautifulSoup库解析网页源代码,提取出电影的名称、评分、导演、主演、上映时间等信息。
3. 将提取出的电影信息存储到本地文件或数据库中。
4. 使用Python的matplotlib库或其他可视化库,对电影数据进行可视化分析,例如绘制电影评分的分布图、导演的作品数量排名等。
需要注意的是,在爬取豆瓣电影Top250时需要遵守相关法律法规和网站的使用规定,不得进行恶意攻击、侵犯他人隐私等行为。
相关问题
python爬取豆瓣电影top250并可视化分析,代码实现
好的,以下是Python爬取豆瓣电影Top250并可视化分析的代码实现:
首先,我们需要导入必要的库:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
```
接着,我们需要编写爬取Top250电影信息的函数:
```python
def get_movies():
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'}
movie_list = []
for i in range(0, 250, 25):
url = 'https://movie.douban.com/top250?start={}&filter='.format(i)
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.find_all('div', class_='info')
for movie in movies:
title = movie.find('span', class_='title').text
director = movie.find('div', class_='bd').p.text.split('\n')[1].strip().split(':')[1]
star = movie.find('div', class_='star').text.strip().split('\n')[0]
quote = movie.find('span', class_='inq').text if movie.find('span', class_='inq') else ''
movie_list.append({'title': title, 'director': director, 'star': star, 'quote': quote})
return movie_list
```
该函数使用requests库向豆瓣电影Top250网页发送请求,并使用BeautifulSoup库解析网页内容。然后,它从网页中找到所有电影信息所在的div标签,并使用循环遍历每个电影,并提取出电影的标题、导演、评分和简介。最后,函数将所有电影信息存储在一个列表中,并返回该列表。
接下来,我们可以调用该函数并将电影信息存储在一个DataFrame中:
```python
movies = get_movies()
df = pd.DataFrame(movies)
```
现在,我们可以使用pandas库对数据进行分析和可视化。例如,我们可以计算每个导演的电影数量,并使用matplotlib库绘制一个水平条形图:
```python
director_count = df['director'].value_counts().sort_values(ascending=True)
plt.barh(director_count.index, director_count.values)
plt.title('Number of Movies by Director')
plt.xlabel('Number of Movies')
plt.show()
```
我们还可以计算不同评分的电影数量,并使用饼图将其可视化:
```python
star_count = df['star'].value_counts()
plt.pie(star_count.values, labels=star_count.index, autopct='%1.1f%%')
plt.title('Distribution of Movie Ratings')
plt.show()
```
最后,我们可以将所有电影信息保存到一个CSV文件中:
```python
df.to_csv('movies.csv', index=False)
```
完整代码如下:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
def get_movies():
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'}
movie_list = []
for i in range(0, 250, 25):
url = 'https://movie.douban.com/top250?start={}&filter='.format(i)
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.find_all('div', class_='info')
for movie in movies:
title = movie.find('span', class_='title').text
director = movie.find('div', class_='bd').p.text.split('\n')[1].strip().split(':')[1]
star = movie.find('div', class_='star').text.strip().split('\n')[0]
quote = movie.find('span', class_='inq').text if movie.find('span', class_='inq') else ''
movie_list.append({'title': title, 'director': director, 'star': star, 'quote': quote})
return movie_list
movies = get_movies()
df = pd.DataFrame(movies)
director_count = df['director'].value_counts().sort_values(ascending=True)
plt.barh(director_count.index, director_count.values)
plt.title('Number of Movies by Director')
plt.xlabel('Number of Movies')
plt.show()
star_count = df['star'].value_counts()
plt.pie(star_count.values, labels=star_count.index, autopct='%1.1f%%')
plt.title('Distribution of Movie Ratings')
plt.show()
df.to_csv('movies.csv', index=False)
```
python爬取豆瓣电影top250数据可视化并存入csv
好的,我可以为您提供代码参考。首先需要安装相关的库:requests、BeautifulSoup、pandas、matplotlib。
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
# 获取电影信息
def get_movie_info(url):
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')
movie_list = soup.find_all('div', class_='hd')
info_list = []
for movie in movie_list:
title = movie.a.span.text.strip() # 电影名称
link = movie.a['href'] # 电影链接
rating = movie.parent.find('span', class_='rating_num').text # 评分
rating_num = movie.parent.find('div', class_='star').find_all('span')[-1].text[:-3] # 评分人数
info_list.append([title, link, float(rating), int(rating_num)])
return info_list
# 获取所有电影信息
def get_all_movie_info():
url = 'https://movie.douban.com/top250'
info_list = []
for i in range(10):
page_url = url + f'?start={i*25}'
info_list += get_movie_info(page_url)
return info_list
# 可视化电影评分分布
def plot_rating_distribution(data):
plt.hist(data, bins=10, range=(0, 10), color='b', alpha=0.5)
plt.xlabel('Rating')
plt.ylabel('Number of Movies')
plt.title('Distribution of Movie Ratings')
plt.savefig('rating_distribution.png')
plt.show()
# 存储电影信息到csv文件
def save_to_csv(data):
df = pd.DataFrame(data, columns=['Title', 'Link', 'Rating', 'RatingNum'])
df.to_csv('movie_info.csv', index=False)
if __name__ == '__main__':
movie_info = get_all_movie_info()
save_to_csv(movie_info)
ratings = [info[2] for info in movie_info]
plot_rating_distribution(ratings)
```
以上代码中,`get_movie_info(url)`函数用于获取单页电影信息,`get_all_movie_info()`函数用于获取所有电影信息,`save_to_csv(data)`函数用于将数据存储到csv文件中,`plot_rating_distribution(data)`函数用于绘制电影评分分布直方图。最后在主函数中调用这些函数即可。
阅读全文