电视剧《民国奇探》是一部充斥着逗比风的探案剧,剧中主要角色:三土、四爷、白小姐,三土这个角色类似于《名侦探柯南》中的柯南但带有搞笑属性,四爷则类似于毛利小五郎但有大哥范且武功高强,三土尚文四爷尚武,白小姐大多时候扮演着傻白甜的角色。

因为该剧目前大多数时候都处于爱奇艺电视剧的榜首位置,所以自己也看了几集,总的来说剧情紧凑,剧风逗比,当然最令我印象深刻的还是网友们逗比的弹幕,所以我决定用 Python 将弹幕爬下来大家一起瞧瞧。

数据爬取

现在开始我们的爬取工作,先用浏览器打开电视剧的网页,地址为:https://www.iqiyi.com/v_19rx2un304.html?vfrm=pcw_home&vfrmblk=B&vfrmrst=fcs_0_t12,我们使用开发者工具的 Network 功能,进到 Network 控制台后,我们先使用 Ctrl+R 命令重新加载一下网页,然后再通过过滤器搜索 bullet,如下图所示:



这里的弹幕数据是以 .z 形式的压缩文件存在的,如下图所示:



我们可以看出压缩文件命名规则为 tvid_300_n.z,所以我们先来获取 tvid 列表,代码实现如下所示:

def get_tvid():
# tv_id 列表
tv_id_list = []
for i in range(1, 5):
url = 'https://pcw-api.iqiyi.com/albums/album/avlistinfo?' \
'aid=245212201&page='\
+ str(i) + '&size=30'
res = requests.get(url).text
res_json = json.loads(res)
# 视频列表
move_list = res_json['data']['epsodelist']
for j in move_list:
tv_id_list.append(j['tvId'])
return tv_id_list

获取到 tvid 列表后,我们就可以根据 tvid 获取弹幕的压缩文件了,然后再对其进行解压及存储,实现代码如下所示:

def save_bullet(tvid):
for page in range(1, 10):
url = 'https://cmts.iqiyi.com/bullet/'\
+ tvid[-4:-2] + '/'\
+ tvid[-2:] + '/'\
+ tvid + '_300_'\
+ str(page) + '.z'
print(url)
# 请求弹幕压缩文件
res = requests.get(url).content
res_byte = bytearray(res)
try:
xml = zlib.decompress(res_byte).decode('utf-8')
# 保存路径
path = 'data/' + tvid + '_300_' + str(page) + '.xml'
with open(path, 'w', encoding='utf-8') as f:
f.write(xml)
except:
return

文件存储到本地之后,我们先获取每一个文件的全路径名,实现代码如下所示:

def get_file(path):
for root, ds, fs in os.walk(path):
for f in fs:
yield root + '/' + f

获取到所有文件全路径名后,我们再根据全路径名获取文件并解析弹幕文本信息,实现代码如下所示:

def get_bullet_text(f):
DOMTree = parse(f)
collection = DOMTree.documentElement
# 评论文本内容
xml_list = collection.getElementsByTagName('content')
content_list = []
for j in xml_list:
content_list.append(j.childNodes[0].data)
return content_list

最后,我们可以将整个弹幕字符串信息保存起来,因为我本次爬取的弹幕信息并不是特别多,所有就先存到 txt 文件中吧,实现代码如下所示:

def save2txt(content):
with open('bullet.txt', 'a', encoding='utf-8') as file:
file.write(content)

词云展示

数据保存完了之后,我们再来个词云展示吧,代码实现如下所示:

def jieba_():
content = open('bullet.txt', '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.png'))
# 定义词云的一些属性
wc = WordCloud(
# 背景图分割颜色为白色
background_color='white',
# 背景图样
mask=cloud_mask,
# 显示最大词数
max_words=300,
# 显示中文
font_path='./fonts/simhei.ttf',
# 最大尺寸
max_font_size=70
)
global word_cloud
# 词云函数
x = wc.generate(word_cloud)
# 生成词云图片
image = x.to_image()
# 展示词云图片
image.show()
# 保存词云图片
wc.to_file('mgqt.png')

看一下效果:



如果需要源码,可以扫描文末二维码关注公众号,后台回复 200414 自行领取。

《民国奇探》的弹幕有点逗比,用 Python 爬下来看看的更多相关文章

  1. 弹幕有点逗比,用 Python 爬下来看看《民国奇探》的弹幕

    电视剧<民国奇探>是一部充斥着逗比风的探案剧,剧中主要角色:三土.四爷.白小姐,三土这个角色类似于<名侦探柯南>中的柯南但带有搞笑属性,四爷则类似于毛利小五郎但有大哥范且武功高 ...

  2. 用Python爬取B站、腾讯视频、爱奇艺和芒果TV视频弹幕!

    众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一个组织良好的评论序列.通过分析弹幕,我们可以快速洞察广大观众对于视频 ...

  3. B站真的是一个神奇的地方,初次用Python爬取弹幕。

    "网上冲浪""886""GG""沙发"--如果你用过这些,那你可能是7080后: "杯具"" ...

  4. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  5. python 爬取B站视频弹幕信息

    获取B站视频弹幕,相对来说很简单,需要用到的知识点有requests.re两个库.requests用来获得网页信息,re正则匹配获取你需要的信息,当然还有其他的方法,例如Xpath.进入你所观看的视频 ...

  6. python爬取斗鱼B总直播弹幕

    在某群中看到关于弹幕爬取的需求,又因为斗鱼比较OP,就以这个作为切入点. 如果你想了解如何获取弹幕,我的这个例子就可以让你豁然开朗,对于哪些没有开发弹幕的直播或视频平台,就需要用抓包工具获取请求,然后 ...

  7. python 爬取bilibili 视频弹幕

    # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/09 下午 4:50 # 爬取弹幕 import requests import j ...

  8. Python爬取爱奇艺资源

    像iqiyi这种视频网站,现在下载视频都需要下载相应的客户端.那么如何不用下载客户端,直接下载非vip视频? 选择你想要爬取的内容 该安装的程序以及运行环境都配置好 下面这段代码就是我在爱奇艺里搜素“ ...

  9. Python爬取b站任意up主所有视频弹幕

    爬取b站弹幕并不困难.要得到up主所有视频弹幕,我们首先进入up主视频页面,即https://space.bilibili.com/id号/video这个页面.按F12打开开发者菜单,刷新一下,在ne ...

随机推荐

  1. forEach 循环数组 # for in 循环对象 key # for of 循环对象 value

    forEach 循环数组 # for in 循环对象 key # for of 循环对象 value

  2. 【转】在Eclipse下,出现“找不到或无法加载主类 ”的问题的解决方式

    实际上是第一次碰到这个问题,之前从来没有遇见过,于是乎就开始找“度娘”帮忙,一搜发现有很多的程序猿都遇到这个问题.网上大部分的解决方案都是说“环境变量”配置有错误,当然这确实是引发“找不到或无法加载主 ...

  3. xargs命令_Linux xargs命令:一个给其他命令传递参数的过滤器

    本文要为大家介绍的命令是 xargs,我们把它称为护花使者,因为它总是乐于协助其他的命令来完成一些事情.下面一起来看看它是如何护花的. xargs 是 execute arguments 的缩写,它的 ...

  4. 说两个我在工作中有价值的bug

    看了虫师在公众号上写的一边文章,叫做<面试官问,说一个你在工作非常有价值的bug>.看完虫师举的列子后,我也开始想之前测试的bug,想到之后,觉得有必要记录一下. First,在测试新闻动 ...

  5. Servlet(一)----快速入门

    ## Servlet:server applet *  概念:运行在服务端的小程序 *  servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则. *  将来我们自定义一 ...

  6. 面试刷题24:介绍一枚 JAVA妹妹?

    java提供的自动垃圾收集机制大大提高了程序员的开发效率. 但是自动垃圾收集不是万能的,明确jvm的内存结构,工作机制是设计高扩展应用的基础. 也是诊断jvm运行时问题的必备技能. 我是李福春,我在准 ...

  7. matplotlib.pyplot库函数关于坐标轴显示的支持

    matplotlib.pyplot库函数关于坐标轴显示的支持 https://blog.csdn.net/Stark_595/article/details/80787005?depth_1-utm_ ...

  8. 《利用Hyper-V搭建虚拟机》一篇管够,持续更新

    开门见山:win10+Hyper-V+ContOS7.X 万物皆有目的:没钱买云服务器,但平时在家想持续学习,可以考虑在自己windows上搭建一台虚拟机,然后装上Linux,调试通网络进行开发. 涉 ...

  9. “GANs”与“ODEs”:数学建模的终结?

    在本文中,我想将经典数学建模和机器学习之间建立联系,它们以完全不同的方式模拟身边的对象和过程.虽然数学家基于他们的专业知识和对世界的理解来创建模型,而机器学习算法以某种隐蔽的不完全理解的方式描述世界, ...

  10. 使用webhooks进行代码的自动化部署

    AutoMaticDeployment---自动部署 项目简介 使用Github的webhooks进行代码的自动化部署 本项目是个人最近搞的一个小工具,自己最近在用hexo部署个人博客(地址:http ...