爬取爬取豆瓣top250所有的电影,内容包括:排名,名称,导演,评分,电影封面图片,将数据存储到film.csv中。获取top250所有的电影封面图片,并存储到film_pic中。最后将存储数据进行检查处理,实现以电影名评价数及评分生成折线图的可视化操作
时间: 2024-04-23 18:25:03 浏览: 106
好的,这是一个比较复杂的任务,需要涉及到爬虫、数据处理和可视化等多个方面。我可以为您提供一些思路和代码示例,但是具体实现还需要您自己动手尝试。首先,我们需要使用 Python 中的 requests 和 BeautifulSoup 库来爬取豆瓣电影排行榜。代码示例如下:
```python
import requests
from bs4 import BeautifulSoup
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')
```
接下来,我们需要从网页中提取出电影的排名、名称、导演、评分和电影封面图片等信息。可以使用 BeautifulSoup 库的 find_all() 方法和正则表达式来提取。代码示例如下:
```python
import re
movie_list = []
for movie in soup.find_all('div', class_='item'):
# 获取电影排名
rank = movie.find('div', class_='pic').em.get_text()
# 获取电影名称
title = movie.find('span', class_='title').get_text()
# 获取电影导演和主演
info = movie.find('div', class_='bd').p.get_text().strip()
director = re.findall('导演: (.+?)\n', info)[0]
# 获取电影评分
rating = movie.find('span', class_='rating_num').get_text()
# 获取电影封面图片链接
pic_url = movie.find('img').get('src')
movie_list.append([rank, title, director, rating, pic_url])
```
接下来,我们需要将爬取到的数据存储到 CSV 文件中。可以使用 Python 自带的 csv 模块来实现。代码示例如下:
```python
import csv
with open('film.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['排名', '名称', '导演', '评分', '电影封面图片'])
writer.writerows(movie_list)
```
接下来,我们需要下载电影封面图片,并将其存储到本地。可以使用 Python 的 requests 库来下载图片。代码示例如下:
```python
import os
if not os.path.exists('film_pic'):
os.makedirs('film_pic')
for movie in movie_list:
pic_url = movie[-1]
pic_name = movie[1] + '.jpg'
pic_path = os.path.join('film_pic', pic_name)
with open(pic_path, 'wb') as f:
response = requests.get(pic_url)
f.write(response.content)
```
最后,我们需要对存储的数据进行检查处理,并实现折线图的可视化操作。可以使用 Python 的 pandas 和 matplotlib 库来实现。代码示例如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('film.csv', encoding='utf-8')
df['评价数'] = df['评分'].apply(lambda x: int(x.replace('人评价', '')))
df['评分'] = df['评分'].astype(float)
df.sort_values(by=['评分', '评价数'], ascending=False, inplace=True)
plt.plot(df['名称'], df['评价数'], label='评价数')
plt.plot(df['名称'], df['评分'], label='评分')
plt.xticks(rotation=90)
plt.legend()
plt.show()
```
以上就是对于您提出的问题的一个大致的解答,希望能够对您有所帮助。
阅读全文