过去一周突然有个很不错的想法,想用b站的弹幕来生成一个词云的效果。于是辛苦奋战一周,大概花了十个小时左右,整出了这个全新的小工具——《词云弹幕姬》访问地址http://danmu.xiezuoguan.cn/
参考我上传的b站视频

「弹幕词云姬」硬核up主花费一周开发了一款根据弹幕生成词云的工具

先给大家看下效果,主要界面如下,上面是两个输入框来输入av号和cid号来定位视频。中间是选择背景图,下方是最近大家提交过的内容。



这个是输入av号点查询的效果。查询成功会提示解析成功并自动带出cid号(什么是cid号下面会讲)

这个是词云最终生成的效果图

演示完成后我们开始简单讲技术部分
后端开发:
核心内容就三部分,第一部分如何获取弹幕信息,第二部分如何分词,第三部分如何生成词云。

第一部分获取弹幕:

这个是百度一下就有前人的经验,这个玩意儿是从cid号查到的,访问’http://comment.bilibili.com/’+str(cid)+’.xml’就是获取的弹幕信息了。那cid号又是从哪里来的呢?
访问一个视频后,加载的html里直接ctrl+F搜索cid就可以了。但是我们是学技术的嘛,所要用正则表达式匹配出来,函数代码如下:

#根据av号获取cid
def get_cid_from_av(av):url = 'http://www.bilibili.com/video/av'+str(av)#print(url)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36'}response = requests.get(url=url, headers=headers)response.encoding = 'utf-8'html = response.text#print(html)#用try防止有些av号没视频try:soup = BeautifulSoup(html, 'lxml')#视频名title = soup.select('meta[name="title"]')[0]['content']#投稿人author = soup.select('meta[name="author"]')[0]['content']#弹幕的网站代码danmu_id = re.findall(r'cid=(\d+)&', html)[0]#print(title, author)#return danmu_id#写到文件里write_last_commit(title, author)return {'status': 'ok','title': title, 'author': author, 'cid': danmu_id}except:print('视频不见了哟')return {'status': 'no'}

然后有了cid之后获取弹幕,通过jieba这个python库进行分词

#获取弹幕
def get_danmu(cid):url = 'http://comment.bilibili.com/'+str(cid)+'.xml'# print(url)req = requests.get(url)html = req.contenthtml_doc=str(html,'utf-8')   #修改成utf-8#解析soup = BeautifulSoup(html_doc,"lxml")results = soup.find_all('d')contents = [x.text for x in results]# print(contents)return contents

第一部分完成

第二部分分词

#弹幕分词
def danmu_cut(data):word_frequency = dict()#获取停止词stop_word = []#路径问题module_path = os.path.abspath(os.curdir)file_path = os.path.join(module_path,"stopWordList.txt")with open(file_path,'r', encoding='UTF-8' ) as f:for line in f.readlines():stop_word.append(line.strip())#分词words = jieba.cut(data)#统计词频for word in words:if word not in stop_word:word_frequency[word] = word_frequency.get(word, 0) + 1return word_frequency

最后第三部分生成词云

这块用到wordcloud库,百度也有很多写好的东西,我们拿过来改一改就可以用了。

#词云用于web
def draw_wordcloud_for_web(words_dict,cid,mask_pic):#背景图片#绝对路径问题module_path = os.path.abspath(os.curdir)#filename = module_path + "\\bilibili\\"+mask_picinput_file = os.path.join(module_path,'mask_pic',mask_pic)mask = np.array(Image.open(input_file))font_file = os.path.join(module_path,'simhei.ttf')print(font_file)wc = WordCloud(font_path=font_file,  # 设置字体格式mask=mask,max_words=200,max_font_size=60,min_font_size=10,random_state=50,)wc.generate_from_frequencies(words_dict)image_colors = ImageColorGenerator(mask)wc.recolor(color_func=image_colors)# return wc.to_image()#输出的文件名out_file_name = str(cid)+'.jpg'out_file = os.path.join(module_path,'out_put',out_file_name)wc.to_file(out_file)return out_file

至此,python的脚本部分已经完成(实不相瞒,此部分就花了我两个小时不到)
下一节将如何用fastapi将这些通过http server 对外提供成api服务
再下一节简单讲讲画前端vue

[弹幕词云姬]硬核b站up主一周撸出来的小工具,根据b站弹幕生成词云(一)相关推荐

  1. Java小工具:B站视频选集搜索器--获取选集信息

    文章目录 前言 所需第三方包 1.hutool 2.jsoup 一.界面设计 1.idea中jFrameDesigner安装 2.界面设计 二.获取选集信息 1.b站视频网页分析 2.添加按钮事件监听 ...

  2. 搭乘“云原生”硬核实践之舟,移动云助力开发者畅游未来创新之旅

    云改变了IT业态和市场格局,催生了应用大发展的时代,企业可以更加专注于符合其愿景.更具生命力的业务创新.全面使用云服务构建软件的时代已经到来,在这个大背景下,云原生的概念被提出并迅速具象化,其中容器. ...

  3. [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核·干货)

    目录: 老少皆宜.超长干货文警告 1.快速入门创建产品 -- 小白,打包带走去吹牛 2.代码分析 -- 老炮,快速了解能用上 2.1 从start.sh分析开发环境如何自动构建 2.2 从sample ...

  4. [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核·干货)...

    目录:老少皆宜.超长干货文警告 1.快速入门创建产品 -- 小白,打包带走去吹牛 2.代码分析 -- 老炮,快速了解能用上 2.1 从start.sh分析开发环境如何自动构建 2.2 从sample. ...

  5. 面试官硬核提问,教你轻松应对(面试小技巧)1

    每个人都会经历大大小小的很多面试,这里分享一些面试小技巧教你轻松面对,顺利入职.好了,长话短说直接上重点. Q1请自我介绍一下 不要只是简单地读简历,企业主要是想通过这个问题了解你看你是否能胜任这份工 ...

  6. 硬核干货!!!JavaCV 将抖音小视频分割成图片帧图片和将图片合成小视频代码实现

    效果视频 美女屏幕跳舞视频 本功能实现需要用到第三方jar包 javaCV. javaCV简介 JavaCV 提供了在计算机视觉领域的封装库,包括:OpenCV.ARToolKitPlus.libdc ...

  7. uniapp开发微信小程序腾讯地图功能,生成地点云的sig签名

    <script>import { Utils } from '@/libs/util/mapsig.js' const appConfig = uni.getStorageSync('se ...

  8. 这个B站up主太硬核了!纯手工打造AI小电视:硬件自己焊接,驱动代码全手写...

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 晓查 发自 凹非寺  本文转自自:量子位(QbitAI) 一个低调的 ...

  9. 纯手工打造AI小电视,这个B站up主太硬核了!硬件自己焊接,驱动代码全手写...

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

最新文章

  1. Oracle 触发器使用实例
  2. 《分布式操作系统》知识点(29~34)五
  3. sql 问号的使用 php_PHP中bindParam和bindValue的区别
  4. mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等...
  5. java jvm内存地址_深入Java虚拟机——JVM内存详解
  6. 【C语言简单说】六:取模运算符以及变量的扩展
  7. python删除txt指定内容_使用Python删除文本文件中的部分内容 | 学步园
  8. C++:内存分几个区
  9. 数据反正模拟 matlab,[2018年最新整理]信号处理MATLAB函数.doc
  10. centos6.5下的mysql5.6.30安装
  11. CDR排钻教程-CorelDRAW服装设计中的排钻技术
  12. 自学编程系列——4 Numpy数组
  13. python连接access数据库未找到提供程序_连接ACCESS数据库时未找到提供程序.该程序可能未正确安装的解决...
  14. Linux安装deb安装包
  15. cnn 分层 可视化 网站_如何可视化分层数据以显示整体关系
  16. 杭电oj ——1000 A+B问题
  17. Matlab绘图:绘制双坐标轴(双y轴)并设置两个y轴的颜色
  18. 关于转行软件测试行业必备课程学习的解答
  19. 开发板FPGA电机控制源码(verilog+nios2架构)FPGA电机控制源码
  20. HW2018校招软件类笔试题

热门文章

  1. 手机游戏《魔塔》实现细节——(1)需求收集
  2. Python灰帽子——黑客与逆向工程师的Python编程之道
  3. Kubernetes 学习总结(28)—— Kubernetes 常见问题总结
  4. java读取excel大文件
  5. 模电multisim实验
  6. linux 中的 super 命令
  7. 基于Node.js的图书管理系统
  8. cocos2d-x传智播客_Hanselminutes播客167-与Jeremy Miller进行的配置约定
  9. linux freemind字体,解决freemind中文乱码
  10. mysql squid_Linux 实现 squid+mysql认证