使用Python爬取B站“乔萝莉”弹幕并绘制词云,看看观众们的问候评论...

举报
技术火炬手 发表于 2019/07/31 14:20:34 2019/07/31
【摘要】 就在这两天某直播平台“萝莉主播”乔碧萝殿下的一次真人出镜,引爆了各大网络平台。

1.png

就在这两天某直播平台“萝莉主播”乔碧萝殿下的一次真人出镜,引爆了各大网络平台。不清楚状况的朋友,看看下面的图片就秒懂了。

image.png

image.png

今天看到朋友圈大牛的一则挣钱思路,分享给大家:变声器+女装大佬+直播 = 一夜暴富!原谅我出卖了你的朋友圈,可是我是真的觉得好有道理啊,哈哈…

2.png

大家都知道,一般出现这种娱乐新闻,哪个网站最活跃?如果不知道我来提示你一句,我喜欢唱跳rap篮球…哈哈,没错B站啊!今天我就带大家去B站看看这位现在被公众尊称乔奶奶的萝莉主播相关视频。为了避免被和谐,找了半天,找到一个她直播下五子棋的短视频。

image.png

大家要问了,娱乐贴也不能光看视频和图片吧?到底要闹哪样….B站什么最出名,当然是弹幕了,今天我就带大家分析下B站弹幕,看看有多少网友,对乔奶奶送来了热切的祝福!

3.png

B站弹幕的获取方式,网上很多的帖子都有说明了,格式如下:

'https://comment.bilibili.com/' + cid + '.xml'

格式时统一的,只需要我们知道视频的cid即可,那么cid何如获取呢?so easy!

image.png

我们F12打开开发者工具,然后看到下面一水儿的请求前面都带的数字,就是cid喽。验证下对不对!https://comment.bilibili.com/106640800.xml

看了下没什么毛病!

image.png

4.png

既然是一则慰问乔奶奶的文章,我们就来分析下弹幕中到底有哪些内容!那么,今天我再拿这个弹幕做一个练习。

小练习思路:

通过requests获取网页数据

使用BeautifulSoup解析弹幕内容

通过wordcloud生成弹幕词云

这里有一个问题,上次做太古神王词云的时候,没有找一个对比度明显的图片,导致最后的词云生成效果很差,这次找了半天,终于找到了一张白底的卡通图片,如下图:

image.png

万事俱备,只差撸代码了,走起…

代码开发

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/7/30 22:54
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : GreetingsToQiao.py

import requests
from bs4 import BeautifulSoup
import jieba
import numpy as np
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator


class GreetingsToQiao:
    def __init__(self):
        self.url = url
        self.stopwords = self.get_stopwords('stopwords.txt')
        self.word_frequency = dict()

    def get_info(self):
        r = requests.get(self.url)
        r.encoding = 'UTF-8'
        return r.text

    def get_comments(self):
        html_data = self.get_info()
        soup = BeautifulSoup(html_data, 'lxml')
        return ','.join([comment.text for comment in soup.findAll('d')])

    @staticmethod
    def get_stopwords(file):
        with open(file, encoding='utf-8') as f:
            lines = f.readlines()
        return [line.strip() for line in lines]

    def comments_cut(self, data):
        words = jieba.cut(data)
        for word in words:
            if word not in self.stopwords:
                self.word_frequency[word] = self.word_frequency.get(word, 0) + 1

    def draw_word_cloud(self):
        mask = np.array(Image.open('backgroundpicture.jpg'))
        wc = WordCloud(
            font_path='C:/Windows/Fonts/simhei.ttf',  # 设置字体格式
            mask=mask,
            max_words=200,
            max_font_size=100
        )
        wc.generate_from_frequencies(self.word_frequency)
        image_colors = ImageColorGenerator(mask)
        wc.recolor(color_func=image_colors)
        wc.to_file('greeting.jpg')

    def run(self):
        comments = self.get_comments()
        self.comments_cut(comments)
        print(self.word_frequency)
        self.draw_word_cloud()


if __name__ == '__main__':
    url = 'https://comment.bilibili.com/106640800.xml'
    Main = GreetingsToQiao()
    Main.run()

让我们看看最终的词云效果吧

image.png

5.png

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。

代码、背景图、最终生成的词云,我打包上传百度云了,公众号回复萝莉获取下载地址,哈哈….

期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

在之后的周一至五清晨7点10分,希望都能让清风Python的知识文章叫醒大家!谢谢……

---------------

本文转自-作者:王翔|清风Python

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。