爬取豆瓣top250的的电影内容,包括:排名,名称,导演,评分,电影封面图片存储到film.csv中,并将电影图片获取后存储到film_pic文件夹中。最后将存储数据进行检查处理,实现以电影名评价数及评分生成折线图的可视化操作
时间: 2024-04-23 09:27:21 浏览: 108
好的,这是一个比较复杂的任务,需要使用 Python 中的爬虫库、数据处理库和可视化库。这里我可以给你一个大致的思路,供你参考:
1. 使用 requests 和 BeautifulSoup 库获取豆瓣电影 Top250 页面的 HTML 文件;
2. 使用正则表达式或 BeautifulSoup 解析 HTML 文件,获取电影的排名、名称、导演、评分和封面图片链接;
3. 使用 pandas 库将电影信息存储到 CSV 文件中,使用 urllib 库下载电影封面图片并保存到本地文件夹中;
4. 使用 pandas 和 matplotlib 库对数据进行处理和可视化,生成折线图。
参考代码:
```python
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
import urllib.request
import os
import matplotlib.pyplot as plt
# 获取豆瓣电影 Top250 页面的 HTML 文件
url = 'https://movie.douban.com/top250'
headers = {'User-Agent':'Mozilla/5.0'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析 HTML 文件,获取电影信息
films = []
for item in soup.find_all('div', class_='item'):
film = {}
film['rank'] = item.find('em').text
film['name'] = item.find('span', class_='title').text
film['director'] = re.search('导演: (.+?)\n', item.find('p', class_='').text).group(1)
film['score'] = item.find('span', class_='rating_num').text
film['pic'] = item.find('img')['src']
films.append(film)
# 将电影信息存储到 CSV 文件中
df = pd.DataFrame(films)
df.to_csv('film.csv', index=False)
# 下载电影封面图片并保存到本地文件夹中
if not os.path.exists('film_pic'):
os.makedirs('film_pic')
for film in films:
pic_url = film['pic']
pic_name = film['name'].replace('/', '') + '.jpg'
pic_path = os.path.join('film_pic', pic_name)
urllib.request.urlretrieve(pic_url, pic_path)
# 对数据进行处理和可视化,生成折线图
df = pd.read_csv('film.csv')
df = df.sort_values(by='score', ascending=False)
df = df.head(10)
plt.plot(df['name'], df['score'], label='score')
plt.plot(df['name'], df.index+1, label='rank')
plt.xticks(rotation=45, ha='right')
plt.legend()
plt.show()
```
注意:由于豆瓣网站的反爬机制比较严格,上面的代码可能会在获取网页源代码时出现问题,需要加入一些反爬措施,比如使用代理 IP、随机 User-Agent 等。
阅读全文