脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python 抖音评论数据抓取分析

Python 抖音评论数据抓取分析

2022-08-28 12:14Python学习与数据挖掘 Python

大家好,最近抖音张同学突然火了,两个月涨粉一千多万。今天这篇文章,我抓取了张同学的视频的评论数据,想从文本分析的角度,挖掘一下大家对张同学感兴趣的点

张同学 10.4号开始发视频,视频的点赞量一直很高,11.17 号的视频达到了顶峰,收获 250w 个赞,之后关注量也开启了暴涨。

Python 抖音评论数据抓取分析

所以挖掘 11.17 号视频的评论,更有助于我们达成目的。另外,为方便大家更好的学习爬虫技术和数据可视化分析,完整版代码我放在文末。

1. 抓取数据

抖音出了 web 版,抓取数据方便了很多。

Python 抖音评论数据抓取分析

抓评论

滑到网页评论区,在浏览器网络请求里过滤包含comment的请求,不断刷新评论就可以看到评论的接口。

有了接口,就可以写 Python 程序模拟请求,获取评论数据。

请求数据要设置一定间隔,避免过大请求,影响别人服务

抓取评论数据有两点需要注意:

  • 有时候接口可能返回空数据,因此需要多试几次,一般过了人工滑动验证后的接口基本可用
  • 不同页面之间的数据可能会重复,所以需要跳页请求

2. EDA

11.17 号的视频有 12w 条评论,我只抓取了 1w 多条。

Python 抖音评论数据抓取分析

text列是评论。

先对数据做一些探索性的分析,之前介绍过几个EDA工具,可以自动产出基础的数据统计和图表。

这次我用的是ProfileReport

# eda
profile = ProfileReport(df, src="/uploads/allimg/220828/12152Q011-3.jpg" />

评论时间分布

从评论的时间分布来看,由于发布的视频的时间是17号,所有17、18号评论发布量比较多。不过再往后甚至到了 12.9 号,仍然有不少新评论产生,说明视频热度确实很高。

Python 抖音评论数据抓取分析

评论的长度分布

大多数评论的字数在 20 以内,基本不超过 40 个字,说明都是短文本。

Python 抖音评论数据抓取分析

评论者身份

参与评论的人里, 99.8% 是没有认证身份的,说明评论用户里基本都是普通用户。

3. LDA

上面的统计数据还是太粗略了。但我们要想知道大家的感兴趣点在哪,又不可能细到把 1.2w 条评论全部看完。

所以需要对这些评论先做一次归类,相当于把数据升维,抽象。因为只有将数据升维,了解每个维度的含义和占比,才能帮助我们从全局角度掌握数据。

这里我用LDA算法对文本聚类,聚合在一起的评论可以看做属于同一个主题。

LDA算法的核心思想有两点:

  • 具有一定相似性的文本会聚合在一起,形成一个主题。每个主题包含生成该主题需要的词,以及这些词的概率分布。以此可以人为推断出主题的类别。
  • 每篇文章会它有在所有主题下的概率分布,以此可以推断出文章属于哪个主题。

比如,经过LDA算法聚类后,某个主题中,战争、军费这类词出现概率很高,那么我们可以将该主题归类为军事。如果有一篇文章属于军事主题的概率很高,我们就可以将该文章分为军事一类。

简单介绍完LDA的理论,下面我们来实战一下。

3.1 分词、去停用词

# 分词

emoji = {"可怜", "发呆", "晕", "灵机一动", "击掌", "送心", "泣不成声", "哈欠", "舔屏", "偷笑", "愉快", "再见", "666", "熊吉", "尬笑", "吐舌", "撇嘴", "看", "绿帽子", "捂脸", "呆无辜", "强壮", "震惊", "阴险", "绝", "给力", "打脸", "咖啡", "衰", "一起加油", "酷拽", "流泪", "黑脸", "爱心", "笑哭", "机智", "困", "微笑袋鼠", "强", "闭嘴", "来看我", "色", "憨笑", "不失礼貌的微笑", "红脸", "抠鼻", "调皮", "紫薇别走", "赞", "比心", "悠闲", "玫瑰", "抱拳", "小鼓掌", "握手", "奸笑", "害羞", "快哭了", "嘘", "惊讶", "猪头", "吐", "暗中观察", "不看", "啤酒", "呲牙", "发怒", "绝望的凝视", "大笑", "吐血", "坏笑", "凝视", "可爱", "拥抱", "擦汗", "鼓掌", "胜利", "感谢", "思考", "微笑", "疑问", "我想静静", "灵光一闪", "白眼", "泪奔", "耶"}
stopwords = [line.strip() for line in open("stop_words.txt", encoding="UTF-8").readlines()]

def fen_ci(x):
    res = []
    for x in jieba.cut(x):
        if x in stopwords or x in emoji or x in ["[", "]"]:
            continue
        res.append(x)
    return " ".join(res)

df["text_wd"] = df["text"].apply(fen_ci)

由于评论中有许多 emoji 表情, 我抽取了所以 emoji 表情对应的文本,生成 emoji 数组,用于过滤表情词。

3.2 调用LDA

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
import numpy as np

def run_lda(corpus, k):
    cntvec = CountVectorizer(min_df=2, token_pattern="w+")
    cnttf = cntvec.fit_transform(corpus)
    
    lda = LatentDirichletAllocation(n_components=k)
    docres = lda.fit_transform(cnttf)
    
    return cntvec, cnttf, docres, lda
    
cntvec, cnttf, docres, lda = run_lda(df["text_wd"].values, 8)

经过多次试验,将数据分成 8 类效果较好。

选取每个主题下出现概率 top20 的词:

Python 抖音评论数据抓取分析

主题的词分布

从这些词概率分布,归纳各主题的类别,主题0 ~ 主题7分别是:居然看完、知道钥匙在哪、农村生活、喂狗、拍摄手法、还用锁门?、鸡蛋放盐多、袜子放枕头下。

统计主题占比:

Python 抖音评论数据抓取分析

主题占比

红色的是主题3(喂狗),占比最大,很多人评论是:以为要做给自己吃,没想到是喂狗的。我看的时候也是这样认为的。

其他各主题占比比较均匀。

经过主题分类后,我们可以发现,张同学不仅仅是农村生活引起了大家的关注,更多的是视频中大量反常态的镜头。

最后,用树状图展示各主题及对应的具体评论。

Python 抖音评论数据抓取分析

核心代码已经贴在文章里,完整代码如下方式领取。

代码

链接:https://pan.baidu.com/s/1FnIgkW2b_uVtQq1Z-i8PJA
提取码:1234

原文链接:https://blog.csdn.net/weixin_38037405/article/details/122389962

延伸 · 阅读

精彩推荐