Python爬取豆瓣电影评论数与好评关系分析
电影评论对观众选择观看电影有着重要影响,而豆瓣作为一个知名的影评平台,聚集了大量观众对电影的看法。本文将通过Python爬虫技术,爬取豆瓣的电影评论数据,并对评论数与好评之间的关系进行分析。
一、项目准备
环境设置
首先,确保你的计算机上安装了Python环境。推荐使用Python 3.6及以上版本。同时,我们需要安装以下库:
pip install requests beautifulsoup4 pandas matplotlib seaborn
编写爬虫
接下来,我们使用requests
库获取豆瓣电影的评论数据,并用BeautifulSoup
解析网页。
import requests
from bs4 import BeautifulSoup
import pandas as pd
def fetch_movie_comments(movie_id, page):
url = f' * 20}&limit=20&sort=new_score&status=P'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
comments = []
for comment_div in soup.findAll('div', {'class': 'comment-item'}):
comment = comment_div.find('span', {'class': 'short'}).text
star_rating = comment_div.find('span', {'class': 'rating'})['class'][0][-2]
comments.append((comment, star_rating))
return comments
# 示例:获取某个电影的评论
movie_id = '1292052' # 例如《肖申克的救赎》
comments = []
for page in range(5): # 获取前5页评论
comments.extend(fetch_movie_comments(movie_id, page))
# 转换为DataFrame
df_comments = pd.DataFrame(comments, columns=['Comment', 'Star'])
二、数据处理
在爬取到电影评论后,我们需要对数据进行清洗与整理。对于评分,我们将其转化为数值型数据,并统计每种评分的评论数量。
df_comments['Star'] = df_comments['Star'].astype(int)
star_counts = df_comments['Star'].value_counts().sort_index()
三、关系分析
我们将评论的数量与好评(如5星和4星)的关系进行分析,并用可视化的方式展示结果。
1. 饼状图
通过饼状图,我们可以直观地查看好评与差评的比例。
import matplotlib.pyplot as plt
labels = ['1 Star', '2 Stars', '3 Stars', '4 Stars', '5 Stars']
sizes = star_counts
plt.figure(figsize=(8, 8))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.title('Ratings Distribution')
plt.show()
pie
title Rating Distribution
"1 Star": 5
"2 Stars": 10
"3 Stars": 15
"4 Stars": 25
"5 Stars": 45
2. 评论数与好评的关系可视化
为了更深入地分析评论数与好评之间的关系,我们可以绘制条形图,展示好评的数量和总评论数。
import seaborn as sns
good_ratings = star_counts[4] + star_counts[5]
total_comments = star_counts.sum()
sns.barplot(x=['Good Ratings', 'Total Comments'], y=[good_ratings, total_comments])
plt.title('Comments Analysis')
plt.ylabel('Number of Comments')
plt.show()
四、结论
通过以上的分析,我们可以看到豆瓣电影的评论数与好评之间的关系。好评的比例往往高于差评,并且评论数量多的电影更可能获得较高的评分。这为我们在选择观看电影时提供了重要参考。
旅行图
在爬取数据的过程中,整个旅程可用旅行图呈现:
journey
title 豆瓣电影评论分析之旅
section 数据爬取
启动爬虫: 5: 拉取数据
数据解析: 4: 提取评论
section 数据处理
清洗数据: 4: 处理异常值
生成DataFrame: 5: 数据整理
section 数据分析
统计评论: 5: 评星统计
绘制饼状图: 4: 可视化展示
绘制评论分析图: 5: 深入分析
通过以上的分析与可视化,使用Python进行数据爬取和分析不仅能提供我们对电影评论的深层了解,而且增强了我们对影评平台数据的应用能力。希望本文能激发你对数据分析的兴趣,开启你的数据之旅!