火爆全球的《鱿鱼游戏》,尝试用Python做一波分析!

把最近很火的一个韩剧《鱿鱼游戏》刷了下,这部剧整体剧情来说还是非常不错的,很值得一看。

作为一个技术博主,当然不能在这儿介绍这部剧的影评,毕竟自己在这方面不是专业的,也不擅长啊。

本文呢,主要是爬取《鱿鱼游戏》在豆瓣上的一些影评,对数据做一些简单的分析,用数据的角度重新审视下这部剧。

技术工具

在正文开始之前,先介绍下本篇文章中用到的技术栈和工具。

本文用到的技术栈和工具如下,归结为四个方面:

  • 语言:Python,Vue,javascript

  • 存储:MongoDB

  • 库:echarts,Pymongo,WordArt...

  • 软件:Photoshop

数据采集

本次数据采集的目标网站为 豆瓣,但自己的账号之前被封,所以只能采集到大概二百来条数据,豆瓣有相应的反爬机制,浏览10页以上的评论需要用户登录才能进行下一步操作。

至于为啥账号被封,是因为之前自己学爬虫时不知道在哪里搞的【豆瓣模拟登录】代码,当时不知道代码有没有问题,愣头青直接用自己的号试了下,谁知道刚试完就被封了,而且还是永久的那种。

134ccd4223fff9aa05fdd69b266b3959.png图1

在这里也给大家提个醒在以后做爬虫时,模拟登录时尽量用一些测试账号,能不用自己的号就别用。

这次数据采集也比较简单,就是更改图2 中 url 上的 start 参数,以 offset 为 20 的规则作为下一页 url 的拼接:

b6406fa838e3e1ec239707ee6dd391bb.png图2

拿到请求连接之后,用 requests 的 get 请求,再对获取到的 html 数据做个解析,就能获取到我们需要的数据了。采集核心代码贴在下方:

for offset in range(0,220,20):
    url = "https://movie.douban.com/subject/34812928/comments?start={}&limit=20&status=P&sort=new_score".format(offset)
    res = requests.get(url,headers= headers)
    # print(res.text)
    soup = BeautifulSoup(res.text,'lxml')
    time.sleep(2)
    for comment_item in soup.select("#comments > .comment-item"):
        try:

            data_item = []
            avatar = comment_item.select(".avatar a img")[0].get("src")
            name = comment_item.select(".comment h3 .comment-info a")[0]
            rate = comment_item.select(".comment h3 .comment-info span:nth-child(3)")[0]
            date = comment_item.select(".comment h3 .comment-info span:nth-child(4)")[0]
            comment = comment_item.select(".comment .comment-content span")[0]
            # comment_item.get("div img").ge
            data_item.append(avatar)
            data_item.append(str(name.string).strip("\t"))
            data_item.append(str(rate.get("class")[0]).strip("allstar").strip('\t').strip("\n"))
            data_item.append(str(date.string).replace('\n','').strip('\t'))
            data_item.append(str(comment.string).strip("\t").strip("\n"))
            data_json ={
                'avatar':avatar,
                'name': str(name.string).strip("\t"),
                'rate': str(rate.get("class")[0]).strip("allstar").strip('\t').strip("\n"),
                'date' : str(date.string).replace('\n','').replace('\t','').strip(' '),
                'comment': str(comment.string).strip("\t").strip("\n")
            }
            if not (collection.find_one({'avatar':avatar})):
               print("data _json is {}".format(data_json))
               collection.insert_one(data_json)
            f.write('\t'.join(data_item))
            f.write("\n")
        except Exception as e:
            print(e)
            continue

豆瓣爬取时需要记得加上 cookie 和 User-Agent,否则会有数据为空,

为了后面数据可视化提取方便,本文用的是 Mongodb 作为数据存储,共有211 条数据,主要采集的数据字段为 avatarnameratedatecomment,分别表示用户头像、用户名字、星级、日期,评论。结果见图3

070e9edd7c70e6235ffce7ba617c9d1e.png图3

这里如果你不熟悉,MongoDB,用csv文件或其他方式作为数据存储也是可以的。

数据可视化

可视化部分之前打算用 Python + Pyecharts 来实现,但 Python 图表中的交互效果不是很好,索性就直接用原生 Echarts + Vue  组合来实现,而且这样的话,将所有图表放在一个网页中也比较方便。

首先是对评论时间与评论数量做了一个图表预览,根据这些数据的评论时间作为一个散点图分布,看一下用户评论主要的时间分布:

4c9ea7292075f53716cb110f2d5c7ab4.gif图4

图4中点的大小和颜色代表当天评论数量,而评论数量也可以侧面反应该剧当天的热度。

可以了解到,《鱿鱼游戏》影评从 9 月17 日开始增长,在 20 号数量达到顶峰,21 日回落,在 21日-29日评论数量来回震荡,相差不大。

直到国庆 10月1日最少,猜测可能是一方面是国庆假期大家都出去玩的缘故,另一方面是随着时间推移,这个剧的热度也就降下来了

为了了解大家对《鱿鱼游戏》的评价,我对这二百条数据对这个剧的【评分星级】绘制了一个饼图,最终效果见 图5:

de616e2541ef0a7f3831d79e0848a146.gif图5

说实话图5 的结果让我有些意外,至少对于我而言这部剧质量说实话还是蛮高的,绘图之前以为【五星】的占比应该是最大的,其次是【四星】,再然后是【三星】。

现在【三星】和【五星】的占比恰恰相反,猜测可能是这部剧的情节比较残忍,会引起人的不适,所以高分占比不高。

为了方便,最后我将上面两张图表放置在一个网页上,效果见图6图7 两种不同布局

垂直布局

b52bfc49a2fe39d620212e40c2926294.gif图6

水平布局

0bb1f39955050673116d9b731e13bb6e.gif图7
词云可视化

本次采集的数据信息有限,能分析的数据维度不多,关于数据图表方面的分析基本就到这里了。下面是对采集到的评论做了几张词云图:

af9c48a0c68f24062be3b2a544b4a3d6.png图8

图8来看,去除现实中常用到的还是就是等口头语,人性 是影评中频率最高的一个词,而这个词确实符合《鱿鱼游戏》这部剧的主题,从第一集开始到结束都是在剖析人性,赌徒们的“贪婪、赌性成瘾”,贵宾们的“弱肉强食”

c89add0dffcb202498d6ac512c045cd2.png图9

对比上张词云图,图9凸显的信息相对就多了些,例如韩国人设刺激剧情赌博默示录题材等都与剧情有关,除了这几个信息之外,李政宰孔刘李秉宪 等几个主演也被提到。

最后,以两张照片墙作为文章的结尾:

3b99eb32d631d95a45e16edab41f3461.png图10 437ebcde2915074e7e20e0bcd86247da.png图11

图10图11 照片墙的轮廓采用的是剧中的两个人物截图,一个是123木头人 ,另外一个是男一在玩游戏二的一个镜头:

57cbe5424a661f462fb15e891b109759.png
小结

以上就是本篇文章的全部内容了,本文主要是介绍了 Python 在数据采集和可视化方面的一些应用。

获取本文相关代码

请在公众号 菜鸟学Python 后台回复关键字 鱿鱼 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径

量化: 定投基金到底能赚多少钱?  | 我用Python对去年800只基金的数据分析

干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析|   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记灯谜答题王 |用Python做个海量小姐姐素描图碟中谍这么火,我用机器学习做个迷你推荐系统电影

趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!

AI: 会做诗的机器人给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影

小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!

年度爆款文案

 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
点阅读原文,看Python全套!
鱿鱼算法(Squid algorithm)是一种用于解决优化问题的启发式算法,它模拟了鱿鱼捕食的行为。在Python中实现鱿鱼算法,需要定义问题的目标函数和约束条件,并根据问题的特点设计适应度函数。 以下是一个简单的示例,演示如何使用鱿鱼算法求解一个简单的目标函数的最小值: ```python import random # 目标函数 def objective_function(x): return x ** 2 # 适应度函数 def fitness(x): return 1 / (objective_function(x) + 1) # 鱿鱼算法 def squid_algorithm(bounds, max_iter, num_squids): # 初始化种群 population = [random.uniform(bounds[0], bounds[1]) for _ in range(num_squids)] for _ in range(max_iter): # 更新每个个体的位置 for i in range(num_squids): old_position = population[i] new_position = old_position + random.uniform(-1, 1) # 边界处理 new_position = max(bounds[0], min(bounds[1], new_position)) # 若新位置更好,则更新个体位置 if fitness(new_position) > fitness(old_position): population[i] = new_position # 找到适应度最好的个体 best_squid = max(population, key=fitness) best_fitness = fitness(best_squid) return best_squid, best_fitness # 示例运行 bounds = [-10, 10] # 变量范围 max_iter = 100 # 最大迭代次数 num_squids = 50 # 鱿鱼个体数量 best_squid, best_fitness = squid_algorithm(bounds, max_iter, num_squids) print(f"Best Squid: {best_squid}") print(f"Best Fitness: {best_fitness}") ``` 请注意,这只是一个简单的示例,实际问题的求解可能需要更复杂的逻辑和调整参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值