python爬虫,豆瓣上面获取排名前列的电影名称、导演和演员、评分、排名、图片存储到films.csv电影图片获取后存储到films_ pic文件夹中对存储数据进行检查处理,实现以电影名评价数及评分生成折线图的可视化操作。
时间: 2024-04-21 22:28:29 浏览: 126
以下是一个示例代码,实现了从豆瓣电影排行榜中获取电影信息并存储到 csv 文件和下载电影图片到本地的功能,同时也包含了数据清洗和可视化操作。
```python
import requests
from bs4 import BeautifulSoup
import csv
import os
import matplotlib.pyplot as plt
# 请求头信息,模拟浏览器访问
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'}
# 获取排行榜页面 html 数据
url = 'https://movie.douban.com/chart'
response = requests.get(url, headers=headers)
html = response.text
# 解析 html 数据
soup = BeautifulSoup(html, 'html.parser')
movie_list = soup.find_all('div', class_='pl2')
# 存储电影信息到 csv 文件和下载电影图片到本地
with open('films.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['电影名称', '导演和演员', '评分', '排名'])
for i, movie in enumerate(movie_list):
# 解析电影信息
movie_name = movie.find('a').text.strip()
movie_url = movie.find('a')['href']
movie_director_actor = movie.find('p', class_='pl').text.strip()
movie_rating = movie.find('span', class_='rating_nums').text.strip()
movie_rank = i + 1
# 写入 csv 文件
writer.writerow([movie_name, movie_director_actor, movie_rating, movie_rank])
# 下载电影图片
pic_url = movie.find('img')['src']
pic_response = requests.get(pic_url, headers=headers)
pic_name = movie_name.replace('/', ' ') + '.jpg'
pic_path = os.path.join('films_pic', pic_name)
with open(pic_path, 'wb') as pic_file:
pic_file.write(pic_response.content)
# 读取 csv 文件中的电影信息,并进行数据清洗
movie_names = []
movie_ratings = []
movie_ranks = []
with open('films.csv', 'r', newline='', encoding='utf-8-sig') as f:
reader = csv.reader(f)
next(reader) # 忽略 csv 文件头部
for row in reader:
movie_name = row[0]
movie_rating = float(row[2])
movie_rank = int(row[3])
movie_names.append(movie_name)
movie_ratings.append(movie_rating)
movie_ranks.append(movie_rank)
# 绘制电影名评价数及评分的折线图
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(movie_names, movie_ratings, 'r-', label='评分')
ax2.plot(movie_names, movie_ranks, 'b-', label='排名')
ax1.set_xlabel('电影名称')
ax1.set_ylabel('评分')
ax2.set_ylabel('排名')
plt.xticks(rotation=90)
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
plt.show()
```
在运行代码之前,需要先创建一个名为 `films_pic` 的文件夹用于存储电影图片。运行代码后,会在当前目录下生成一个名为 `films.csv` 的 csv 文件,存储了电影名称、导演和演员、评分、排名等信息;同时会在当前目录下生成 `films_pic` 文件夹,并下载电影图片到该文件夹中。最后会绘制电影名评价数及评分的折线图,展示电影排名情况。
阅读全文