Python爬取豆瓣电影短评并利用wordcloud生成词云图
在本教程中,我们将介绍如何使用Python爬取豆瓣电影短评,并利用wordcloud库生成词云图。我们将使用Python的requests、BeautifulSoup、jieba和wordcloud库来实现这个功能。以下是一个完整攻略,包含两个示例。
步骤1:获取电影短评
首先,我们需要获取豆瓣电影的短评。我们可以使用requests库发送HTTP请求,并使用BeautifulSoup库解析HTML。以下是一个示例代码,演示如何获取电影短评:
import requests
from bs4 import BeautifulSoup
# 获取电影短评
def get_movie_comments(movie_id):
url = f'https://movie.douban.com/subject/{movie_id}/comments?status=P'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
comments = soup.find_all('span', class_='short')
return [comment.text for comment in comments]
# 示例1:获取电影短评
movie_id = '1292052'
comments = get_movie_comments(movie_id)
print(comments[:10])
# 示例2:获取多部电影短评
movie_ids = ['1292052', '1291546', '1295644']
all_comments = []
for movie_id in movie_ids:
comments = get_movie_comments(movie_id)
all_comments.extend(comments)
print(all_comments[:10])
在上面的代码中,我们首先定义了一个名为get_movie_comments的函数,它接受一个电影ID作为参数,并返回该电影的短评。在函数内部,我们使用requests库发送HTTP请求,并使用BeautifulSoup库解析HTML。然后,我们使用find_all方法找到所有的短评,并将它们存储在一个列表中。最后,我们返回该列表。
步骤2:分词
接下来,我们需要对短评进行分词。我们可以使用jieba库来实现这个功能。以下是一个示例代码,演示如何对短评进行分词:
import jieba
# 分词
def cut_words(text):
words = jieba.cut(text)
return ' '.join(words)
# 示例1:分词
text = '这是一句测试短评。'
words = cut_words(text)
print(words)
# 示例2:分词多条短评
comments = ['这是一句测试短评。', '这是另一句测试短评。']
all_words = []
for comment in comments:
words = cut_words(comment)
all_words.append(words)
print(all_words)
在上面的代码中,我们首先定义了一个名为cut_words的函数,它接受一个文本作为参数,并返回分词后的文本。在函数内部,我们使用jieba库对文本进行分词,并使用join方法将分词结果连接成一个字符串。最后,我们返回该字符串。
步骤3:生成词云图
最后,我们需要使用wordcloud库生成词云图。以下是一个示例代码,演示如何生成词云图:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 生成词云图
def generate_wordcloud(text):
wordcloud = WordCloud(background_color='white', width=800, height=600).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
# 示例1:生成词云图
text = '这是一句测试短评。'
generate_wordcloud(text)
# 示例2:生成多个词云图
comments = ['这是一句测试短评。', '这是另一句测试短评。']
all_words = ''
for comment in comments:
words = cut_words(comment)
all_words += words
generate_wordcloud(all_words)
在上面的代码中,我们首先定义了一个名为generate_wordcloud的函数,它接受一个文本作为参数,并生成词云图。在函数内部,我们使用WordCloud库生成词云图,并使用imshow和axis方法显示词云图。最后,我们使用show方法显示词云图。
示例1:生成单个电影短评的词云图
以下是一个示例代码,演示如何生成单个电影短评的词云图:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 获取电影短评
def get_movie_comments(movie_id):
url = f'https://movie.douban.com/subject/{movie_id}/comments?status=P'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
comments = soup.find_all('span', class_='short')
return [comment.text for comment in comments]
# 分词
def cut_words(text):
words = jieba.cut(text)
return ' '.join(words)
# 生成词云图
def generate_wordcloud(text):
wordcloud = WordCloud(background_color='white', width=800, height=600).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
# 示例:生成单个电影短评的词云图
movie_id = '1292052'
comments = get_movie_comments(movie_id)
all_words = ''
for comment in comments:
words = cut_words(comment)
all_words += words
generate_wordcloud(all_words)
在上面的代码中,我们首先定义了一个名为get_movie_comments的函数,它接受一个电影ID作为参数,并返回该电影的短评。然后,我们定义了一个名为cut_words的函数,它接受一个文本作为参数,并返回分词后的文本。接着,我们定义了一个名为generate_wordcloud的函数,它接受一个文本作为参数,并生成词云图。最后,我们调用get_movie_comments函数获取电影短评,并使用cut_words函数对短评进行分词。然后,我们将所有分词结果连接成一个字符串,并调用generate_wordcloud函数生成词云图。
示例2:生成多个电影短评的词云图
以下是一个示例代码,演示如何生成多个电影短评的词云图:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 获取电影短评
def get_movie_comments(movie_id):
url = f'https://movie.douban.com/subject/{movie_id}/comments?status=P'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
comments = soup.find_all('span', class_='short')
return [comment.text for comment in comments]
# 分词
def cut_words(text):
words = jieba.cut(text)
return ' '.join(words)
# 生成词云图
def generate_wordcloud(text):
wordcloud = WordCloud(background_color='white', width=800, height=600).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
# 示例:生成多个电影短评的词云图
movie_ids = ['1292052', '1291546', '1295644']
all_comments = []
for movie_id in movie_ids:
comments = get_movie_comments(movie_id)
all_comments.extend(comments)
all_words = ''
for comment in all_comments:
words = cut_words(comment)
all_words += words
generate_wordcloud(all_words)
在上面的代码中,我们首先定义了一个名为get_movie_comments的函数,它接受一个电影ID作为参数,并返回该电影的短评。然后,我们定义了一个名为cut_words的函数,它接受一个文本作为参数,并返回分词后的文本。接着,我们定义了一个名为generate_wordcloud的函数,它接受一个文本作为参数,并生成词云图。最后,我们使用for循环遍历多个电影ID,并调用get_movie_comments函数获取电影短评。然后,我们使用cut_words函数对短评进行分词,并将所有分词结果连接成一个字符串。最后,我们调用generate_wordcloud函数生成词云图。
总结
本教程介绍了如何使用Python爬取豆瓣电影短评,并利用wordcloud库生成词云图。我们使用的requests、BeautifulSoup、jieba和wordcloud库来实现这个功能。我们提供了两个示例代码,演示如何生成单个电影短评的词云图和多个电影短评的词云图。这些示例代码可以帮助我们更好地理解如何使用Python爬取豆瓣电影短评,并利用wordcloud库生成词云图。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 爬取豆瓣电影短评并利用wordcloud生成词云图 - Python技术站