对于天下霸唱的鬼吹灯,相信很多小伙伴都知道,它可谓是国内盗墓寻宝系列小说的巅峰之作,最近得知该系列小说的《龙岭迷窟》部分被制作成了网剧,已经于 4 月 1 日开播了,主要演员潘粤明、姜超、张雨绮等都是一些大家比较熟悉的面孔,网剧质量、剧情还原度等到底怎么样呢?我们通过本文来简单了解一下。

我们都知道要了解一件事情是需要用数据说话的,本文数据来源我们还是选择豆瓣的评论区数据吧,先打开该剧豆瓣地址:https://movie.douban.com/subject/30488569/ 看一下:



我们发现目前已经有两万七千多人参与了评分且打 4 星和 5 星的人数居多,总体评分 8.3,算是一个比较优秀的分数了。

接着我们将网页向下拉到短评位置,如下所示:



目前有六千多人写了短评,但我们知道豆瓣最多只能查看 500 条短评数据,我们的数据来源就取 500 条短评数据。

获取数据

首先,我们通过 Python 爬取《龙岭迷窟》500 条豆瓣短评数据,爬取的具体细节这里就不说了,如果不了解的话,可以看一下:豆瓣爬取细节参考

我们爬取的数据项包括:评论用户、评论时间、评论星级、评论内容,爬取的数据我们存储到 csv 文件中,实现代码如下:

def spider():
url = 'https://accounts.douban.com/j/mobile/login/basic'
headers = {"User-Agent": 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'}
# 龙岭迷窟网址,为了动态翻页,start 后加了格式化数字,短评页面有 20 条数据,每页增加 20 条
url_comment = 'https://movie.douban.com/subject/30488569/comments?start=%d&limit=20&sort=new_score&status=P'
data = {
'ck': '',
'name': '自己的用户名',
'password': '自己的密码',
'remember': 'false',
'ticket': ''
}
session = requests.session()
session.post(url=url, headers=headers, data=data)
# 初始化 4 个 list 分别存用户名、评星、时间、评论文字
users = []
stars = []
times = []
content = []
# 抓取 500 条,每页 20 条,这也是豆瓣给的上限
for i in range(0, 500, 20):
# 获取 HTML
data = session.get(url_comment % i, headers=headers)
# 状态码 200 表是成功
print('第', i, '页', '状态码:',data.status_code)
# 暂停 0-1 秒时间,防止IP被封
time.sleep(random.random())
# 解析 HTML
selector = etree.HTML(data.text)
# 用 xpath 获取单页所有评论
comments = selector.xpath('//div[@class="comment"]')
# 遍历所有评论,获取详细信息
for comment in comments:
# 获取用户名
user = comment.xpath('.//h3/span[2]/a/text()')[0]
# 获取评星
star = comment.xpath('.//h3/span[2]/span[2]/@class')[0][7:8]
# 获取时间
date_time = comment.xpath('.//h3/span[2]/span[3]/@title')
# 有的时间为空,需要判断下
if len(date_time) != 0:
date_time = date_time[0]
date_time = date_time[:10]
else:
date_time = None
# 获取评论文字
comment_text = comment.xpath('.//p/span/text()')[0].strip()
# 添加所有信息到列表
users.append(user)
stars.append(star)
times.append(date_time)
content.append(comment_text)
# 用字典包装
comment_dic = {'user': users, 'star': stars, 'time': times, 'comments': content}
# 转换成 DataFrame 格式
comment_df = pd.DataFrame(comment_dic)
# 保存数据
comment_df.to_csv('data.csv')
# 将评论单独再保存下来
comment_df['comments'].to_csv('comment.csv', index=False)

分析数据

数据我们已经取到了,接下来我们开始对所获取的数据进行分析。

评论数量

首先,我们来看一下不同时间用户的评论数量,实现代码如下:

csv_data = pd.read_csv('data.csv')
df = pd.DataFrame(csv_data)
df_gp = df.groupby(['time']).size()
values = df_gp.values.tolist()
index = df_gp.index.tolist()
# 设置画布大小
plt.figure(figsize=(8, 5))
# 数据
plt.plot(index, values, label='评论数')
# 设置数字标签
for a, b in zip(index, values):
plt.text(a, b, b, ha='center', va='bottom', fontsize=13, color='black')
plt.title('评论数量随时间变化折线图')
plt.tick_params(labelsize=10)
plt.ylim(0, 300)
plt.legend(loc='upper right')
plt.show()

看一下效果图:



尽管该剧截止目前只有 4 天的评论数据,我们从图中也不难发现一些规律:我们可以看出 4 月 1 日和 2 日两天的评论数量较多,其中 4 月 1 日为首播日,评论数量多合乎情理,而 4 月 2 日评论数量多于 4 月 1 日,我们可以推测是因为该剧播出之后迅速传播的结果,也就是让更多的人知道了该剧,之后随着时间的推移热度会有所下降,评论数量呈递减的趋势,评论数量变化的趋势也侧面反映了该剧热度变化的大致趋势。

人物角色

接着,我们来看所获取的评论数据中,剧中主要角色被提及的次数,实现代码如下:

csv_data = pd.read_csv('data.csv')
roles = {'胡八一':0, '王胖子':0, '雪莉杨':0, '鹧鸪哨':0, '大金牙':0, '陈瞎子':0}
names = list(roles.keys())
for name in names:
jieba.add_word(name)
for row in csv_data['comments']:
row = str(row)
for name in names:
count = row.count(name)
roles[name] += count
plt.figure(figsize=(8, 5))
# 数据
plt.bar(list(roles.keys()), list(roles.values()), width=0.5, label='提及次数', color=['r', 'dodgerblue', 'c', 'm', 'y', 'g'])
# 设置数字标签
for a, b in zip(list(roles.keys()), list(roles.values())):
plt.text(a, b, b, ha='center', va='bottom', fontsize=13, color='black')
plt.title('角色被提及次数柱状图')
plt.xticks(rotation=270)
plt.tick_params(labelsize=10)
plt.ylim(0, 200)
plt.legend(loc='upper right')
plt.show()

看一下效果图:



从图中我们可以看出被提及角色数量的前三甲为:胡八一、王胖子、大金牙,通过角色被提及的次数,我们也可以大致推测出剧中角色的受欢迎程度,角色被提及的次数越多说明其受欢迎的程度应该越高。

评论星级

再接着,我们看一下该剧每天用户的评论星级,星级最高为 5 星,一天中如果有多条评论星级数据,我们则取其平均值,代码实现如下:

csv_data = pd.read_csv('data.csv')
df_time = csv_data.groupby(['time']).size()
df_star = csv_data.groupby(['star']).size()
index = df_time.index.tolist()
value = [0] * len(index)
# 生成字典
dic = dict(zip(index, value))
for k, v in dic.items():
stars = csv_data.loc[csv_data['time'] == str(k), 'star']
# 平均值
avg = np.mean(list(map(int, stars.values.tolist())))
dic[k] = round(avg ,2)
# 设置画布大小
plt.figure(figsize=(8, 5))
# 数据
plt.plot(list(dic.keys()), list(dic.values()), label='星级', color='red', marker='o')
plt.title('评论星级随时间变化折线图')
plt.tick_params(labelsize=10)
plt.ylim(0, 5)
plt.legend(loc='upper right')
plt.show()

看一下效果图:



我们从图中可以看出该剧评论星级大致维持在 4 星以上,说明大部分用户对于该剧的质量是比较认可的,评论星级也基本反映出了用户对于该剧的满意度。

词云展示

最后,我们对评论内容进行词云展示,看一下哪些词汇才是评论区的热门词汇,代码实现如下:

def jieba_():
# 打开评论数据文件
content = open('comment.csv', 'rb').read()
# jieba 分词
word_list = jieba.cut(content)
words = []
# 过滤掉的词
remove_words = ['以及', '不会', '一些', '那个', '只有',
'不过', '东西', '这个', '所有', '这么',
'但是', '全片', '一点', '一部', '一个',
'什么', '虽然', '一切', '样子', '一样',
'只能', '不是', '一种', '这个', '为了']
for word in word_list:
if word not in remove_words:
words.append(word)
global word_cloud
# 用逗号隔开词语
word_cloud = ','.join(words) def cloud():
# 打开词云背景图
cloud_mask = np.array(Image.open('bg.jpg'))
# 定义词云的一些属性
wc = WordCloud(
# 背景图分割颜色为白色
background_color='white',
# 背景图样
mask=cloud_mask,
# 显示最大词数
max_words=100,
# 显示中文
font_path='./fonts/simhei.ttf',
# 最大尺寸
max_font_size=80
)
global word_cloud
# 词云函数
x = wc.generate(word_cloud)
# 生成词云图片
image = x.to_image()
# 展示词云图片
image.show()
# 保存词云图片
wc.to_file('anjia.png')

看一下效果图:



如果需要完整代码,可以微信搜索公众号 Python小二 或扫描下方二维码,后台回复 龙岭迷窟 即可。

潘粤明的《龙岭迷窟》到底怎么样?我用 Python 得出了一些结论!的更多相关文章

  1. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  2. 鬼吹灯之龙岭迷窟百度云迅雷BT在线观看免费全集

    看视频搜索微信公众号:qyw1091 还记得去年5月11日在高家堡举行的<鬼吹灯之龙岭迷窟>开机仪式吗?时隔数月,这部网剧于4月1日将在腾讯视频全网独播了! . <鬼吹灯之龙岭迷窟& ...

  3. Kafka 消费者到底是什么 以及消费者位移主题到底是什么(Python 客户端 1.01 broker)

    Kafka 中有这样一个概念消费者组,所有我们去订阅 topic 和 topic 交互的一些操作我们都是通过消费者组去交互的. 在 consumer 端设置了消费者的名字之后,该客户端可以对多个 to ...

  4. 一个用来爬小说的简单的Node.js爬虫

    小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...

  5. diocp3-服务器的连接上限是到底是多少?diocp3的一个装13测试(8W连接数)

    服务器的连接上限是到底是多少?diocp3开源项目的一个装13测试(8W连接数) 测试DEMO路径 diocp3\samples\ECHO 之前群里说一台服务器最多是High(Word)的连接数655 ...

  6. Python左手画条龙右手画个彩虹

    左手画龙右手画彩虹听说很火,Python也可以画出很美的彩虹,准确的说像彩虹棒棒糖:) 效果如下图: # -*- coding: utf-8 -*- # @Time : 2019/12/16 23:2 ...

  7. 2017年7月25日多校一Function

    Function这道题我当时一直很迷,到底怎么来的啊,为什么会这样啊?? 然后看了题解才知道,原来是找循环啊. 已知f(i)=b[f(a(i)],则 f(0) = b[f(a[0])] = b[f(2 ...

  8. JS+MySQL获取 京东 省市区 地区

    采集了一下JD的省市区地区 (非常简单,只是做个记录) 1.建表:account_area   2.进入页面: https://reg.jd.com/reg/company 在浏览器(Firefox) ...

  9. 转:为什么说Python是最值得学习的编程语言

    老猿作为一个老程序员,研究生毕业后就没有这么用心的学过一门新的语言,而今年4月开始学Python以来,疯狂的迷上了它,有时很想写一篇为什么要学Python的文章,可一直懒没动笔,今天看到博友" ...

随机推荐

  1. AE脚本:把SubRip/SRT/TXT/VTT字幕导入到AE

    脚本介绍 如果您需要在视频中嵌入字幕以进行网络或磁带传送,那么这个脚本则非常有用.可以将SubRip/SRT/TXT/VTT字幕格式文件通过 pt_ImportSubtitles脚本直接加载到AE软件 ...

  2. vue——一个页面实现音乐播放器

    请忽略下面这段文字年关将至,时间好歹又多出了些许.却不敢过度消遣.岁月未曾饶过我,我亦不想饶过岁月.且将它塞得膨胀,让这一年看似加更充实.不曾料想我一个爱些风花雪月.研墨行歌之人,却做起了碼农这一行当 ...

  3. webpack从0到1超详细超基础学习教程

    概念 自己是一个一听到webpack就头大,看着一堆不知道那是什么玩意的东西总觉得自己做好前端就行了,但是在使用vue-cli的时候总觉得要改其中的一些东西进行项目初始化的时候能够更好使用!所以想要根 ...

  4. Python学习笔记--迭代

    在Python中,迭代是通过for ... in来实现.只要是可迭代的对象都可以用for ... in来进行历遍. 常用的有list.tuple.dict等.举例如下: 列表的迭代: L=[1,2,3 ...

  5. C#小游戏—钢铁侠VS太空侵略者

    身为漫威迷,最近又把<钢铁侠>和<复仇者联盟>系列又重温了一遍,真的是印证了那句话:“读书百遍,其意自现”.看电影一个道理,每看一遍,都有不懂的感受~ 不知道大伙是不是也有同样 ...

  6. pycharm专业版激活破解(亲测有效)

    完成破解步骤,亲测有效! 1.打开路径,修改hosts文件:C:\Windows\System32\drivers\etc 找到hosts文件打开 最后一行添加这行代码:   0.0.0.0 acco ...

  7. 峰哥说技术:10-Spring Boot静态资源处理

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 10  峰哥说技术:Spring Boot静态资源处理 今天我们聊聊关于 Spring Boot 中关于静 ...

  8. excel排序技术记录

    问题: 给了我一个excel,要求以奖项和编码同时进行排序(奖项优先),但是单元格大小不一样,有数列都是合并了单元格的,同时编码的格式还不一样,有些是SMM-2-07,有些是2-07,所以根本无法进行 ...

  9. disruptor 核心概念 二

    一.Disruptor图解 二.disruptor核心概念 1.RingBuffer到底是啥?正如名字所说的一样,他是一个环(首尾相接的环)它用做在不同上下文(线程)间传递数据的buffer Ring ...

  10. 解决挖矿病毒【Xmrig miner 】CPU 100%服务器卡死问题

    背景: 突然有一天,服务器访问很慢很慢,进程查看发现CPU是100%,而且没有任何降低的意思 收集: 打开任务管理器,进程查看中CPU排序,发现一个System的进程,第一想法以为是空闲利用,发现结束 ...