bilibili怎么设置弹幕数量_python爬虫:bilibili弹幕爬取+词云生成
如果你懒得看下边的文字,我录了一个完整的教学视频在b站上。
我的B站教学:https://www.bilibili.com/video/av75377135?p=2
工作原理
b站是提供弹幕接口的,所以我们的整体操作进行如下:
1.到B站获取cid2.将cid与网站固定格式进行链接3.用python请求网页4.进行简单的单词处理5.生成词云
接下来我们就按照刚才说的顺序进行详细解释
操作顺序
1.到B站获取cid
首先点进一个视频网页,点击F12-network获取监测页面,然后一定要点击播放视频,我们就会在监测页面中看到一个叫heartbeat的XHR脚本,点开任意一个即可。
点击之后我们需要看Headers,里边包括了我们想知道的信息。往下滚动就会发现cid,这个id是唯一的,也就是说下次抓取的时候还可以用这个id。
2.将cid与网站固定格式进行链接
我们拿到cid之后就可以去检查一下是否可以获取弹幕了。获取的固定xml格式是: https://comment.bilibili.com/视频的cid.xml
例如在这里我们的页面就是:
'https://comment.bilibili.com/94198756.xml'
我们把这个链接用网页的方式打开,就能看到如下内容:
这样我们就确定可以爬取了。
3.用python请求网页
因为是开源的,我们也不需要设置代理agent什么的,直接获取就行
import requestsfrom bs4 import BeautifulSoupurl= 'https://comment.bilibili.com/94198756.xml'request = requests.get(url)#获取页面request.encoding='utf8'#因为是中文,我们需要进行转码,否则出来的都是unicode
通过之前的网页查看,我们发现弹幕的XML规律如下:
停车场反杀龙卷风
都是d开头,所以我们只需要用beautifulsuop来选取所有的‘d’就可以
soup = BeautifulSoup(request.text, 'lxml') results = soup.find_all('d')#找出所有'd'comments = [comment.text for comment in results]#因为出来的时候是bs4格式的,我们需要把他转化成list
这样一个完整的弹幕list就已经有了,这里要注意,b站弹幕提取上线是1000条,所以大于一千的就会随机选取1000条弹幕给你。
4.进行简单的单词处理
拿到之后的弹幕并不能直接满足我们进行单词分析,我们要进行一些简单的清理 (1)有一些英文我们需要统一大小写
comments = [x.upper() for x in comments]#统一大小写
(2)去掉弹幕中的空格 例:‘仙 人 指 路’ 和 ‘仙人指路’ 是没有区别的
comments_clean = [comment.replace(' ','') for comment in comments]#去掉空格
(3)我们简单的看一下弹幕之后发现弹幕里边的’/test’是有很多,但是我们并不需要它,诸如此类:
set(comments_clean)#看一下都有啥类似的没用的词语useless_words = ['//TEST', '/TESR', '/TEST', '/TEST/', '/TEXT', '/TEXTSUPREME', '/TSET', '/Y', '\\TEST']comments_clean = [element for element in comments_clean if element not in useless_words]#去掉不想要的字符
进行完上述处理之后,我们就可以进行词云的制作了。不过在制作之前,还是让我们简单的看一下词频。(不是最终的,因为一会要把句子里的词分开)
import pandas as pdcipin = pd.DataFrame({'danmu':comments_clean})cipin['danmu'].value_counts()
(4)分词 在这里我们把刚才得到的弹幕用jieba库进行分词
danmustr = ''.join(element for element in comments_clean)#把所有的弹幕都合并成一个字符串import jiebawords = list(jieba.cut(danmustr))#分词
(5)进一步clean 分词之后,我们会发现里边有很多的符号或者是单字,这些是没有意义的,我们要去掉这一些。
fnl_words = [word for word in words if len(word)>1]#去掉单字
5.生成词云
至此我们可以通过词词频来生成词云了 首先我们要下载词云的包
!pip install wordcloud
然后生成词云
import wordcloudwc = wordcloud.WordCloud(width=1000, font_path='simfang.ttf',height=800)#设定词云画的大小字体,一定要设定字体,否则中文显示不出来wc.generate(' '.join(fnl_words))
这样就生成了,我们现在来看一下
from matplotlib import pyplot as pltplt.imshow(wc)
如果不满意样子的话是可以在wordcloud.WordCloud里边调整的,例如可以调整画布大小,随机字体颜色区间,画布背景等等。或者更傻的方式就是重新跑一下wc.generate(’ '.join(fnl_words))就可以出来新的图片了
最后保存一下我们做好的图片
wc.to_file(r"C:\Users\CCHANG\Desktop\danmu_pic.png")
顺带提一句,我们还可以拿一个图片作为蒙版按形状生成图片。
我们需要先上传一个图片,把它做成numpy.array的形式。我们就自己画一个图吧,记住,上传的图片背景主题一定要对比鲜明
import cv2img = cv2.imread(r'C:\Users\CCHANG\Desktop\circle.png', cv2.IMREAD_UNCHANGED) #直接读取成了数字格式resized = cv2.resize(img, (800, 800),interpolation = cv2.INTER_AREA)#我们把它重新设定一下大小
不过有的时候用cv2不是非常稳定,所以我们还有另一种方法
from PIL import Imageimport numpy as npimg = Image.open(r'E:\录屏\course3\mask.jpg')resized = np.array(img)
然后我们调整wordcloud里边的一些设置,再生成一次
wc_1 = wordcloud.WordCloud( background_color='black', width=1000, height=800, mask=resized, font_path='simfang.ttf'# ,color_func = wordcloud.random_color_func())wc_1.generate_from_text(' '.join(fnl_words))#绘制图片plt.imshow(wc_1)plt.axis('off')plt.figure()plt.show() #显示图片
最后就变成了这样
记得保存哦~
wc_1.to_file(r'C:\Users\CCHANG\Desktop\danmu_pic_2.png')
记得如果看不懂就去看我的B站教学https://www.bilibili.com/video/av75377135?p=2
完整代码
import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport jiebaimport wordcloudfrom matplotlib import pyplot as plturl= 'https://comment.bilibili.com/94198756.xml'request = requests.get(url)#获取页面request.encoding='utf8'#因为是中文,我们需要进行转码,否则出来的都是unicodesoup = BeautifulSoup(request.text, 'lxml') results = soup.find_all('d')#找出所有'd'comments = [comment.text for comment in results]#得到完整的listcomments = [x.upper() for x in comments]#统一大小写comments_clean = [comment.replace(' ','') for comment in comments]#去掉空格set(comments_clean)#看一下都有啥类似的没用的词语useless_words = ['//TEST', '/TESR', '/TEST', '/TEST/', '/TEXT', '/TEXTSUPREME', '/TSET', '/Y', '\\TEST']comments_clean = [element for element in comments_clean if element not in useless_words]#去掉不想要的字符 cipin = pd.DataFrame({'danmu':comments_clean})cipin['danmu'].value_counts()#查看词频danmustr = ''.join(element for element in comments_clean)#把所有的弹幕都合并成一个字符串words = list(jieba.cut(danmustr))#分词fnl_words = [word for word in words if len(word)>1]#去掉单字wc = wordcloud.WordCloud(width=1000, font_path='simfang.ttf',height=800)#设定词云画的大小字体,一定要设定字体,否则中文显示不出来wc.generate(' '.join(fnl_words))plt.imshow(wc)#看图wc.to_file(r"C:\Users\CCHANG\Desktop\danmu_pic.png")#保存#######################################################加蒙板的图片import cv2img = cv2.imread(r'C:\Users\CCHANG\Desktop\circle.png', cv2.IMREAD_UNCHANGED) #直接读取成了数字格式resized = cv2.resize(img, (800, 800),interpolation = cv2.INTER_AREA)#我们把它重新设定一下大小#不过有的时候用cv2不是非常稳定,所以我们还有另一种方法#from PIL import Image#import numpy as np#img = Image.open(r'E:\录屏\course3\mask.jpg')#resized = np.array(img)wc_1 = wordcloud.WordCloud( background_color='black', width=1000, height=800, mask=resized, font_path='simfang.ttf'# ,color_func = wordcloud.random_color_func())wc_1.generate_from_text(' '.join(fnl_words))#绘制图片plt.imshow(wc_1)plt.axis('off')plt.figure()plt.show() #显示图片wc_1.to_file(r'C:\Users\CCHANG\Desktop\danmu_pic_2.png')
作者:https://blog.csdn.net/johnchang0201/article/details/103004229
IT入门 感谢关注 |
一学就会 Python入门教程 →程序员用的单词表→练习地址:www.520mg.com/it |
bilibili怎么设置弹幕数量_python爬虫:bilibili弹幕爬取+词云生成相关推荐
- python爬取bilibili弹幕_python爬虫:bilibili弹幕爬取+词云生成
如果你懒得看下边的文字,我录了一个完整的教学视频在b站上. 我的B站教学:https://www.bilibili.com/video/av75377135?p=2 工作原理 b站是提供弹幕接口的,所 ...
- Python哔哩哔哩弹幕爬取+词云生成
心血来潮,研究下词云,先上图,最终效果 代码 import numpy as np import requests from bs4 import BeautifulSoup from wordclo ...
- layui获取input信息_python爬虫—用selenium爬取京东商品信息
python爬虫--用selenium爬取京东商品信息 1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Hea ...
- python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图
Python 爬虫入门之爬取妹子图 来源:李英杰 链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...
- monthy python爬虫_Python爬虫DOTA排行榜爬取实例(分享)
Python爬虫DOTA排行榜爬取实例(分享) 1.分析网站 打开开发者工具,我们观察到排行榜的数据并没有在doc里 doc文档 在Javascript里我么可以看到下面代码: ajax的post方法 ...
- python 爬视频下载_Python爬虫进阶之爬取某视频并下载的实现
这篇文章我们来讲一下在网站建设中,Python爬虫进阶之爬取某视频并下载的实现.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 这几天在家闲得无聊,意外的挖掘到了一个资源网站 ...
- python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息
原标题:python爬虫框架scrapy爬取梅花网资讯信息 一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息, ...
- 搜狗词库爬虫(1):基础爬虫架构和爬取词库分类
基础爬虫架构 基础爬虫框架主要包括五大模块:爬虫调度器.URL管理器.网页下载器.网页解析器.数据存储器. 爬虫调度器:启动.执行.停止爬虫,统筹其他模块的协调工作. URL管理器:管理已爬取的URL ...
- b站python弹幕签到_Python爬虫 bilibili视频弹幕提取过程详解
两个重要点 1.获取弹幕的url是以 .xml 结尾 2.弹幕url的所需参数在视频url响应的 javascript 中 先看代码 import requests from lxml import ...
最新文章
- 为什么平头哥做芯片如此迅猛?
- Nature:原来益生菌是这么搞定致病菌的
- vue-music(1)音乐播发器 项目开发记录
- 这些deep learning(rnn、cnn)调参的经验值得分享
- java rsa ssh2_给定两个SSH2密钥,如何检查它们是否属于Java中的同一密钥对?
- BZOJ2958 序列染色(动态规划)
- android 桌面视频播放器,ZY-Player ,一款跨平台桌面端视频资源播放器
- JS任务队列--笔记
- Python扩展库安装工具pip的高级用法
- 物联网技术或颠覆传统高等教育
- 安装terrasolid模块的“setup.exe”弹窗setup.inf not found
- 无法删除的文件夹怎么办?如何删除删不掉的文件夹
- JESD 样本量 选择 可靠性 45 77样本量
- 计算机中8位二进制机器数,一个字节由8位二进制数组成,其最大容纳的十进制整数为()...
- 天龙八部八部显示服务器堵塞,天龙八部服务端各目录说明
- 三、运算符 | Verilog
- 158. 精读《Typescript 4》
- 网易实况足球获取服务器信息,网易实况足球国际服和国服数据互通吗_游戏评价介绍...
- 以太坊NFT二层网络之Immutable X(IMX)
- 个人求职简历(.Net)--求广州暑期实习
热门文章
- Github+Hexo搭建静态博客
- CSS3的chapter3
- FCKeditor使用方法技术详解
- android 上下扫描动画,Android扫描雷达动画
- android xml 未能解析文件,Android Studio提示“无法解析符号”,但项目已编译
- oracle定时任务可以备份么,Linux下Oracle设置定时任务备份数据库的教程
- 与计算机硬件相关领域,计算机硬件相关专业论文范文.doc
- java 二进制 base64编码_java 按字节读写二进制文件(Base64编码解码)
- matlab 叠加 area,[转载]matlab学习——area填色图
- 一、Go语言环境搭建