目录
使用BeautifulSoup库,选择'lxml'作为解析器,对获取到的HTML内容进行解析。
一、引言
在当今的数字化时代,网络上的信息量巨大。豆瓣电影作为中国最大的电影评论网站之一,吸引了大量的用户分享他们的观影体验。本文将介绍如何使用Python抓取豆瓣电影的评论,并通过词云分析来展示评论中的高频词汇,使用Python的词云生成库,可以将文本数据转换为词云图。这涉及到词云生成、可视化等方面的知识。通过实践,可以掌握词云生成的基本方法和技巧,并了解如何将文本数据以更加直观的方式呈现出来。
二、抓取海王豆瓣电影评论
-
导入所需库
-
发送GET请求并获取HTML内容
- 使用
requests.get
方法发送GET请求到上面定义的URL,并传入请求头。 - 获取到的HTML内容存储在
html
变量中。
- 使用
-
使用BeautifulSoup解析HTML
-
使用BeautifulSoup库,选择'lxml'作为解析器,对获取到的HTML内容进行解析。
- 使用
soup.find_all('span', class_='short')
查找所有class为'short'的<span>
标签元素,这些元素可能包含电影的短评。这些评论存储在comments
列表中
-
-
写入评论到Excel文件
- 遍历所有抓取到的评论。
- 对于每个评论,将其文本内容添加到Excel工作表的当前行中。
- 在每次添加评论后,代码会等待一个随机时间(0到3秒之间),这是为了避免过于频繁地抓取数据,防止被豆瓣服务器屏蔽
-
保存Excel文件:
- 最后,使用
wb.save('comment.xlsx')
将Excel文件保存为comment.xlsx
。
- 最后,使用
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
import time
import random
# 定义URL和请求头
url = 'https://movie.douban.com/subject/3878007/comments?start=0&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/58.0.3029.110 Safari/537.3'
}
# 发送请求并获取HTML内容
response = requests.get(url, headers=headers)
html = response.text
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html, 'lxml')
comments = soup.find_all('span', class_='short')
# 创建一个Excel工作簿和工作表
wb = Workbook()
ws = wb.active
# 将评论写入Excel文件
for comment in comments:
ws.append([comment.text])
time.sleep(random.random() * 3) # 等待随机时间
# 保存Excel文件
wb.save('comment.xlsx')
三、分析词云
1.导入所需库
接下来,我们导入pandas、jieba、SnowNLP和pyecharts等库。pandas用于数据处理,jieba用于中文分词,SnowNLP用于词性标注,pyecharts用于生成词云。
import pandas as pd #用于数据处理
import jieba # 用于中文分词
from snownlp import SnowNLP # 用于词性标
import pyecharts.options as opts
from pyecharts.charts import WordCloud #用于生成词云
2.读取Excel文件并分词
我们使用pandas库读取一个名为"comment.xlsx"的Excel文件中的评论数据。然后,使用jieba库对评论进行中文分词,以便后续的分析。
data = pd.read_excel(r'comment.xlsx')
data
对'评论'这一列数据进行分词处理,使用jieba.lcut()进行分词。结果保存在新的列'分词'中。
# 分词
data['分词'] = data['评论'].agg(lambda x:jieba.lcut(x))
data
词性标注
对'评论'这一列数据进行词性标注,使用SnowNLP的tags属性进行标注。结果保存在新的列'词性标注'中。
data['词性标注'] = data['评论'].agg(lambda x:list(SnowNLP(x).tags))
data
提取出'词性标注'列中的所有标注,存入一个列表list_tags中。将list_tags转换为一个新的DataFrame,名为data_tags,包含两列,一列是词语,一列是词性。
list_tags = []
for i in data['词性标注']:
for j in i:
list_tags.append(j)
list_tags
data_tags = pd.DataFrame(list_tags,columns=['词语','词性'])
data_tags
统计词频并生成词云
从结果result中提取出词语和出现次数,用于生成词云。保存在名为data_wordcloud_tags的列表中。
result = data_tags[data_tags['词性']=='a'].groupby(by='词语')['词语'].count().sort_values(ascending=False)#[:20]
result
data_wordcloud_tags = [(i,str(j)) for i,j in zip(result.index,result.values)]
data_wordcloud_tags
使用pyecharts的WordCloud图表类型,创建词云图。词云图的数据来自data_wordcloud_tags,词的大小范围是30到100。
设置词云图的标题为"海王的评论",字体大小为23。同时,设置提示框为显示状态。
最后,渲染并输出这个词云图
c = (
WordCloud()
.add(series_name="",
data_pair=data_wordcloud_tags,
word_size_range=[30, 100]
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="海王的评论", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
),
tooltip_opts=opts.TooltipOpts(is_show=True),
)
)
c.render_notebook()
可视化结果展示
使用 render_notebook()
方法将生成的词云图直接在 Jupyter Notebook 中展示出来。
注意:这段代码需要预先安装所有导入的库才能运行。另外,需要保证"comment.xlsx"文件存在且内容格式正确。
完整代码如图:
四、结论
通过抓取豆瓣电影的评论并分析词云,我们可以了解观众对某部电影的关注点和情感倾向。这有助于我们更好地理解观众的需求和喜好,为电影制作和营销提供有价值的参考。同时,本文所介绍的方法也可以应用于其他网络平台的评论分析,为相关领域的研究提供一定的借鉴和帮助。总之,使用Python抓取豆瓣电影评论并分析词云生成词云图,不仅可以学到网络爬虫技术、数据清洗和处理、文本分析和自然语言处理、词云生成技术等基本知识和技能,还可以学习团队协作和项目管理等方面的经验。这些知识和经验对于提高个人的编程能力和综合素质都非常有帮助。