使用Python抓取豆瓣电影评论并分析词云生成词云图

目录

一、引言

二、抓取海王豆瓣电影评论

导入所需库

发送GET请求并获取HTML内容

使用BeautifulSoup解析HTML

使用BeautifulSoup库,选择'lxml'作为解析器,对获取到的HTML内容进行解析。

写入评论到Excel文件

三、分析词云

1.导入所需库

 2.读取Excel文件并分词

   词性标注 

  统计词频并生成词云        

  可视化结果展示

四、结论


    

一、引言

在当今的数字化时代,网络上的信息量巨大。豆瓣电影作为中国最大的电影评论网站之一,吸引了大量的用户分享他们的观影体验。本文将介绍如何使用Python抓取豆瓣电影的评论,并通过词云分析来展示评论中的高频词汇,使用Python的词云生成库,可以将文本数据转换为词云图。这涉及到词云生成、可视化等方面的知识。通过实践,可以掌握词云生成的基本方法和技巧,并了解如何将文本数据以更加直观的方式呈现出来。

二、抓取海王豆瓣电影评论

  1. 导入所需库
  2. 发送GET请求并获取HTML内容
    1. 使用requests.get方法发送GET请求到上面定义的URL,并传入请求头。
    2. 获取到的HTML内容存储在html变量中。
  3. 使用BeautifulSoup解析HTML
    1. 使用BeautifulSoup库,选择'lxml'作为解析器,对获取到的HTML内容进行解析。
    2. 使用soup.find_all('span', class_='short')查找所有class为'short'的<span>标签元素,这些元素可能包含电影的短评。这些评论存储在comments列表中
  4. 写入评论到Excel文件
    1. 遍历所有抓取到的评论。
    2. 对于每个评论,将其文本内容添加到Excel工作表的当前行中。
    3. 在每次添加评论后,代码会等待一个随机时间(0到3秒之间),这是为了避免过于频繁地抓取数据,防止被豆瓣服务器屏蔽
  5. 保存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抓取豆瓣电影评论并分析词云生成词云图,不仅可以学到网络爬虫技术、数据清洗和处理、文本分析和自然语言处理、词云生成技术等基本知识和技能,还可以学习团队协作和项目管理等方面的经验。这些知识和经验对于提高个人的编程能力和综合素质都非常有帮助。

  • 36
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值