本文将介绍如何使用Python对豆瓣影评进行分析。
一、网页爬取
首先我们需要爬取豆瓣电影的影评数据。我们可以使用Python中的requests库和BeautifulSoup库来实现。
import requests
from bs4 import BeautifulSoup
def get_reviews(movie_id):
url = f'https://movie.douban.com/subject/{movie_id}/comments?start=0&limit=20&status=P&sort=new_score'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
reviews = soup.find_all('span', class_='short')
return [review.get_text() for review in reviews]
movie_id = '1292052'
reviews = get_reviews(movie_id)
print(reviews)
上述代码中,我们定义了一个函数get_reviews,根据电影ID爬取豆瓣影评,然后使用BeautifulSoup库解析网页内容,并提取所有短评内容。
二、数据清洗
获得的影评数据可能包含一些不相关的内容,我们需要进行数据清洗,只保留有用的信息。
import re
def clean_reviews(reviews):
cleaned_reviews = []
for review in reviews:
cleaned_review = re.sub(r'[ns]', '', review)
cleaned_reviews.append(cleaned_review)
return cleaned_reviews
cleaned_reviews = clean_reviews(reviews)
print(cleaned_reviews)
上述代码中,我们使用正则表达式去除每条影评中的换行符和空格。
三、情感分析
对电影影评进行情感分析可以帮助我们了解观众对电影的评价是正面还是负面。我们可以使用Python中的TextBlob库来实现情感分析。
from textblob import TextBlob
def analyze_sentiment(reviews):
sentiment_scores = []
for review in reviews:
blob = TextBlob(review)
sentiment_score = blob.sentiment.polarity
sentiment_scores.append(sentiment_score)
return sentiment_scores
sentiment_scores = analyze_sentiment(cleaned_reviews)
print(sentiment_scores)
上述代码中,我们使用TextBlob库创建一个文本Blob对象,并调用sentiment属性获取情感评分。
四、可视化分析结果
最后,我们可以使用Python中的matplotlib库对情感分析结果进行可视化分析。
import matplotlib.pyplot as plt
def plot_sentiment_scores(sentiment_scores):
plt.hist(sentiment_scores, bins=10, range=(-1, 1))
plt.xlabel('Sentiment Score')
plt.ylabel('Number of Reviews')
plt.title('Distribution of Sentiment Scores')
plt.show()
plot_sentiment_scores(sentiment_scores)
上述代码中,我们使用matplotlib库的hist函数绘制情感评分的分布直方图。
五、总结
本文介绍了如何使用Python对豆瓣影评进行分析。我们通过网页爬取获取影评数据,对数据进行清洗和情感分析,并使用matplotlib进行可视化分析。通过这些步骤,我们可以更好地了解观众对电影的评价。