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进行数据爬取和分析不仅能提供我们对电影评论的深层了解,而且增强了我们对影评平台数据的应用能力。希望本文能激发你对数据分析的兴趣,开启你的数据之旅!