python爬取豆瓣排名前列的电影名称,导演,演员,评分,排名,图片。数据存储到films.csv中,数据包括电影名,导演,演员,评分,排名。将电影图片获取后存储到film_pic文件夹中。对存储数据进行检查处理,实现以电影名评价数以及评分生成折线图的可视化
时间: 2024-04-26 21:20:10 浏览: 7
好的,这是一个比较复杂的问题,需要分几步来实现。首先我们需要爬取豆瓣排名前列的电影数据,然后将其存储到文件中。然后我们需要对存储的数据进行处理,生成折线图的可视化。
以下是具体的实现步骤:
1. 导入所需模块
```
import requests
from bs4 import BeautifulSoup
import csv
import os
import matplotlib.pyplot as plt
import pandas as pd
```
2. 爬取电影数据并存储到文件中
```
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")
movies = soup.find_all("div", class_="info")
# 创建csv文件,存储电影数据
with open("films.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerow(["电影名", "导演", "演员", "评分", "排名"])
for i, movie in enumerate(movies):
# 获取电影名
name = movie.find("span", class_="title").text
# 获取导演和演员
info = movie.find("div", class_="bd").p.text.strip().split("\n")
director = info[0].replace("导演: ", "")
actors = info[1].replace("主演: ", "").replace("\xa0", "")
# 获取评分和排名
rating = movie.find("span", class_="rating_num").text
rank = i + 1
# 将数据写入csv文件中
writer.writerow([name, director, actors, rating, rank])
```
3. 下载电影图片并存储到文件夹中
```
# 创建存储电影图片的文件夹
if not os.path.exists("film_pic"):
os.makedirs("film_pic")
# 下载电影图片并存储到文件夹中
for movie in movies:
img_url = movie.find("img")["src"]
img_name = movie.find("span", class_="title").text
img_path = os.path.join("film_pic", img_name + ".jpg")
with open(img_path, "wb") as f:
f.write(requests.get(img_url).content)
```
4. 处理存储的数据并生成折线图
```
# 读取csv文件
df = pd.read_csv("films.csv")
# 按照电影名进行分组,并计算每个电影的评分和评价数的平均值
df_grouped = df.groupby("电影名").agg({"评分": "mean", "排名": "count"})
# 生成折线图
plt.plot(df_grouped["排名"], df_grouped["评分"])
plt.xlabel("评价数")
plt.ylabel("评分")
plt.title("电影评价数与评分关系图")
plt.show()
```
这样就完成了所有的任务,我们成功地爬取了豆瓣排名前列的电影数据,并将其存储到了文件中。然后我们对存储的数据进行处理,生成了电影评价数与评分的折线图。