【爬虫+情感判定+Top10高频词+词云图】"乌克兰"油管热评python舆情分析

一、分析背景

乌克兰局势这两天日益紧张,任何战争到最后伤害的都是无辜平民,所以没有真正的赢家!
祈祷战争早日结束,世界和平!
油管上讨论乌克兰局势的评论声音不断,采用python的文本情感分析技术,挖掘网友舆论导向。

二、整体思路

选取5个近期”乌克兰“相关视频,分析每个视频下的Top300热评:
思维导图.png
  1. 爬虫采集评论(requests)
  2. 情感分类打分、打标判定结果(积极/中性/消极)(中文用SnowNLP,英文用TextBlob)
  3. 统计出Top10高频词(jieba.analyse)
  4. 绘制词云图(wordcloud)

三、代码讲解

3.1 爬虫采集

爬虫程序依然采用上次爬取李子柒油管评论的程序,在此不再赘述。
封装下爬虫程序,达到采集多个视频评论的目的:

video_id_list = ['pYLjb7xIbOk', 'HnFnyNEuCUk', 'F0lYqJmGf-M', 't51ebUWe0Ag', '0RiEMEpKqic']
def download_comments(video_id_list):
    """
    下载视频评论
    :param video_id_list: 视频id列表
    :return: None
    """
    cnt = 1
    for id in video_id_list:
        print('正在爬取第{}个视频的评论'.format(cnt))
        cmd = r"python downloader.py -y={} -o={}.json -s 0 -l 300".format(id, id)  # 按热门排序,爬取前300条评论
        print('开始爬取:{}'.format(id))
        a = os.system(cmd)  # 执行爬取评论命令
        print('结束爬取:{}'.format(id))
        cnt += 1
        print('爬取完成:{}'.format(id))

这样,就把5个代表性视频的前300条热门评论爬取到了,爬取下来是json文件,转换为excel文件:

# 把json批量转换为excel
for file in os.listdir('./'):
    if file.endswith('json'):
        print(file)
        f_head, f_tail = file.split(".")
        print(f_head, " || ", f_tail)
        try:
            df = pd.read_json(file, lines=True)
            df.to_excel('{}.xlsx'.format(f_head), index=False, engine='xlsxwriter', encoding='UTF-8')
        except Exception as e:
            print('Excepted-》{}: {}'.format(file, str(e)))

查看下评论数据的excel文件:
爬取的数据.png

3.2 情感判定

针对每条评论数据,打情感分,判定情感结果,核心逻辑代码:

if not is_chinese(comment):  # 不是中文,是英文评论
    judge = TextBlob(comment)
    sentiments_score = judge.sentiment.polarity
    if sentiments_score < 0:
        tag = '消极'
    elif sentiments_score == 0:
        tag = '中性'
    else:
        tag = '积极'
else:  # 是中文评论
    sentiments_score = SnowNLP(comment).sentiments
    if sentiments_score < 0.5:
        tag = '消极'
    else:
        tag = '积极'

情感得分、判定结果:
情感判定结果.png

当然,还可以统计出积极、中性、消极各占多少百分比,画出饼图,对分析结果更具有说服力。

3.3 Top10高频词

用jieba自带的统计功能,直接获取到高频词和权重,就不要自己造轮子了!

# 用jieba分词统计评论内容的前10关键词
keywords_top10 = jieba.analyse.extract_tags(v_cmt_str, withWeight=True, topK=10)

topK参数传入几,就是统计前几名。

以topK=10为例,统计结果:
top10高频词.png

3.4 词云图

采用wordcloud库绘制词云图,词云图也是一种体现高频词的统计方式。

def make_wordcloud(v_str, v_stopwords, v_outfile):
    """
    绘制词云图
    :param v_str: 输入字符串
    :param v_stopwords: 停用词
    :param v_outfile: 输出文件
    :return: None
    """
    print('开始生成词云图:{}'.format(v_outfile))
    try:
        stopwords = v_stopwords  # 停用词
        backgroud_Image = plt.imread('乌克兰地图.jpg')  # 读取背景图片
        wc = WordCloud(
            scale=4,  # 清晰度
            background_color="white",  # 背景颜色
            max_words=1500,  # 最大词数
            width=1500,  # 图宽
            height=1200,  # 图高
            font_path='/System/Library/Fonts/SimHei.ttf',  # 字体文件路径,根据实际情况(Mac)替换
            # font_path="C:\Windows\Fonts\simhei.ttf",  # 字体文件路径,根据实际情况(Windows)替换
            stopwords=stopwords,  # 停用词
            mask=backgroud_Image,  # 背景图片
        )
        wc.generate(v_str)  # 生成词云图
        wc.to_file(v_outfile)  # 保存图片文件
        print('词云文件保存成功:{}'.format(v_outfile))
    except Exception as e:
        print('make_wordcloud except: {}'.format(str(e)))

wordcloud的核心参数说明,我已经加到注释上了↑,请查阅。

采用乌克兰地图作为背景图,最终效果如下:(左:背景图,右:词云图)
对比图.png

四、得出结论

从情感判定、高频词统计还有词云图体现,网友对此次事件消极和中性的情绪占据了一大部分。

而且仔细查看积极面的评论里,很多评论都是为乌克兰等人民祈福保佑的内容,所以也不是针对战争的积极评价。

所以,整体而言,是负面评价较多。

五、同步视频演示

https://www.zhihu.com/zvideo/1480526739331387392


by: 马哥python说

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容