用 Python 抓取 bilibili 弹幕并分析

优采云 发布时间: 2022-06-01 03:29

  用 Python 抓取 bilibili 弹幕并分析

  

  作者| GitPython

  时隔一年,嵩哥带来他的新作《雨幕》。

  他依旧认真创作,追求高品质,作品在发表之前已听了五百遍以上。

  如此高品质的音乐,大家如何评价呢?通过哔哩哔哩上的视频弹幕,感受一下。

  01实现思路

  首先,利用哔哩哔哩的弹幕接口,把数据保存到本地。接着,对数据进行分词。最后,做了评论的可视化。

  02弹幕数据

  

  平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的数据格式进行加载的。

  比如:

  一个固定的url地址 + 视频的cid + .xml

  只要找到你想要的视频cid,替换这个url就可以爬取所有弹幕了(b站大部分网页给出的字幕限制是1000条)。

  一个视频的cid在哪里呢?

  右键网页,打开网页源代码,搜索 "cid":就能找到:

  

  03保存数据到本地

  有了数据的接口链接,我们就可以利用request模块,获取数据了。

  然后,再利用xpath简单的解析xml,就可以把所有的弹幕信息汇总到一个列表里了。最后,把列表转化成dataframe,保存到本地。

  <p style="font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;text-align: justify;margin-left: 16px;margin-right: 16px;line-height: 1.75em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"># 许嵩新歌《雨幕》<br /># bilibili视频弹幕文件<br />url = 'https://comment.bilibili.com/123072475.xml'<br /><br /># 发送请求<br />response = requests.get(url)<br />xml = etree.fromstring(response.content)<br /><br /># 解析数据<br />dm = xml.xpath("/i/d/text()")<br />print(dm)  # list<br /><br /># 把列表转换成 dataframe<br />dm_df = pd.DataFrame(dm, columns=['弹幕内容'])<br />print(dm_df)<br /><br /># 存到本地<br /># 解决了中文乱码问题<br />dm_df.to_csv('雨幕-弹幕.csv', encoding='utf_8_sig')<br /></p>

  保存的csv数据:

  

  04对数据进行分词

  制作词云前,需要把弹幕数据进行分词。

  关于jieba分词,可以参考:

  <p style="font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;text-align: justify;margin-left: 16px;margin-right: 16px;line-height: 1.75em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"># jieba分词<br />dm_str = " ".join(dm)<br />words_list = jieba.lcut(dm_str)  # 切分的是字符串,返回的是列表<br />words_str = " ".join(words_list)<br /></p>

  05词云可视化

  通过创建词云对象、设置词云参数,最终生成图片,保存到本地。

  <p style="font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;text-align: justify;margin-left: 16px;margin-right: 16px;line-height: 1.75em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"># 读取本地文件<br />backgroud_Image = plt.imread('1.jpg')<br /><br /># 创建词云<br />wc = WordCloud(<br />    background_color='white',<br />    mask=backgroud_Image,<br />    font_path='./SourceHanSerifCN-Medium.otf',  # 设置本地字体<br /><br />    max_words=2000,<br />    max_font_size=100,<br />    min_font_size=10,<br />    color_func=random_color_func,<br />    random_state=50,<br />)<br /><br />word_cloud = wc.generate(words_str) # 产生词云<br />word_cloud.to_file("yumu.jpg") #保存图片<br /></p>

  

  <p style="margin-right: 16px;margin-left: 16px;white-space: normal;line-height: 1.75em;"><br />

  

</p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线