抓取豆瓣上的《长津湖》的热评,我发现了这些

家电修理 2023-07-16 19:17www.caominkang.com电器维修

前言

  •  运行环境python3
  •  作者K同学啊
  •  精品专栏《Matplotlib教程》
  • 刺 优秀专栏《Python入门100题》
  •  推荐专栏《小白入门深度学习》
  • 磊 精选专栏《深度学习100例》

大家,我是K同学啊!

近期一部《长津湖》火爆朋友圈,被各种安利,咱一个人也不想跑电影院去霸个情侣座,就老老实实分析一下影评,看看大家的“观后感”是吧~

定位目标网页

https://movie.douban./subject/25845392/ments

上爬虫,抓取下面四个字段

然后使用pandas对导入数据并做简单的处理

import pandas as pd
import os

file_path = os.path.join("douban.csv")

#读取test.csv文件中的A、B列,若不设置usecols参数,默认读取全部数据。
df = pd.read_csv(open(file_path,'r',encoding='utf-8'), names=["用户名","星评","评论时间","评论"])
df.head()
用户名星评评论时间评论0依然范特西还行2021-09-30 10:23:06有点失望,剧情可以说无,还是一如既往的人物塑造,一如既往的这样煽情,第一场战斗要比第二场好看...1奥利奥小饼干较差2021-09-30 15:13:40看完三个小时只想说以为高潮要来了结果戛止,有点头重脚轻了,水门桥的部分是要单独再拿出来整...2高质量鉴赏达人较差2021-09-26 21:17:48去看了点映,值得票价,三个小时看下来还好,一直战争戏容易麻痹双眼,也刺激。我不喜欢红海因...3吴点半还行2021-09-27 18:16:24只说实话n1、片长太长,对观众非常不友好。战争戏完全可以减少,士兵互相闹着玩的戏完全可以...4xi-xia还行2021-09-30 11:11:45战斗场面篇幅之长,剧情逻辑衔接之弱,看到真的麻木了。片长控制在两个小时更好一点。
star_num = df.星评.value_counts()
star_num = star_num.sort_index()
star_num
力荐  112
推荐   35
该用户未星评   2
较差   14
还行   37
Name: 星评, dtype: int64
豆瓣短评评分占比
from pyecharts.charts import Pie, Bar, Line, Page
from pyecharts import options as opts 
from pyecharts.globals import SymbolType

# 数据对
data_pair = [list(z) for z in zip([i for i in star_num.index], star_num.values.tolist())]

# 饼图
pie1 = Pie(init_opts=opts.InitOpts(idth='800px', height='400px'))
pie1.add('', data_pair, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='豆瓣短评评分占比'), 
      legend_opts=opts.LegendOpts(orient='vertical', pos_='15%', pos_left='2%')
     ) 
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%'))
pie1.render_notebook()
评论数量走势图
# 折线图
line1 = Line(init_opts=opts.InitOpts(idth='800px', height='400px'))
line1.add_xaxis(ment_date.index.tolist())
line1.add_yaxis('', ment_date.values.tolist(),
    #areastyle_opts=opts.AreaStyleOpts(opacity=0.5),
    label_opts=opts.LabelOpts(is_sho=False))
line1.set_global_opts(title_opts=opts.TitleOpts(title='评论数量走势图'), 
#        toolbox_opts=opts.ToolboxOpts(),
       visualmap_opts=opts.VisualMapOpts(max_=140))
line1.set_series_opts(linestyle_opts=opts.LineStyleOpts(idth=4))
line1.render_notebook()

9月30号上映,9月29号就开始造势了,30号达到高峰,1号似乎势头大减啊。

词云图 正面
import jieba

def get_cut_ords(content_series):
 # 读入停用词表
 s_ords = [] 
 
 ith open(r"hit_sords.txt", 'r', encoding='utf-8') as f:
  lines = f.readlines()
  for line in lines:
   s_ords.append(line.strip())

 # 添加关键词
 my_ords = ['长津湖', '志愿军']  
 for i in my_ords:
  jieba.add_ord(i) 

#  自定义停用词
 my_s_ords = ['电影',"长津湖","战争"] 
 s_ords.extend(my_s_ords)      

 # 分词
 ord_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)

 # 条件筛选
 ord_num_selected = [i for i in ord_num if i not in s_ords and len(i)>=2]
 
 return ord_num_selected
text1 = get_cut_ords(content_series=df[(df.星评=='力荐')|(df.星评=='推荐')]['评论'])
text1[:5]
['牺牲', '冰雪', '战士', '应该', '遗忘']
import stylecloud
from IPython.display import Image # 用于在jupyter lab中显示本地图片
# 绘制词云图
stylecloud.gen_stylecloud(text=' '.join(text1), 
        max_ords=1000,
        collocations=False,
        font_path=r'经典综艺体简.ttf',
        icon_name='fas fa-thumbs-up',
        size=360,
        output_name='豆瓣正向评分词云图.png')

Image(filename='豆瓣正向评分词云图.png') 
负面
text2 = get_cut_ords(content_series=df[(df.星评=='还行')|(df.星评=='较差')]['评论'])
text2[:5]
['有点', '失望', '剧情', '一如既往', '人物']
# 绘制词云图
stylecloud.gen_stylecloud(text=' '.join(text2), 
        max_ords=1000,
        collocations=False,
        font_path=r'经典综艺体简.ttf',
        icon_name='fas fa-thumbs-don',
        size=350,
        output_name='豆瓣负向评分词云图.png')
Image(filename='豆瓣负向评分词云图.png') 

 关注下方公众号(K同学啊)回复长津湖,获取源码

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by