美文网首页
使用python爬取B站“乔萝莉”弹幕并绘制词云,看看观众们的问

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

作者: 清风Python | 来源:发表于2019-07-31 00:17 被阅读0次
    他有个想法

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

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

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

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

    B站弹幕的获取方式网上很多的帖子都有说明了,格式如下:
    'https://comment.bilibili.com/' + cid + '.xml'
    格式时统一的,只需要我们知道视频的cid即可,那么cid何如获取呢?so easy!

    获取cid
    我们F12打开开发者工具,然后看到下面一水儿的请求前面都带的数字,就是cid喽。验证下对不对!https://comment.bilibili.com/106640800.xml
    弹幕数据
    看了下没什么毛病!
    弹幕怎么玩?

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

    1. 通过requests获取网页数据
    2. 使用BeautifulSoup解析弹幕内容
    3. 通过wordcloud生成弹幕词云
      这里有一个问题,上次做太古神王词云的时候,没有找一个对比度明显的图片,导致最后的词云生成效果很差,这次找了半天,终于找到了一张白底的卡通图片,如下图:


      词云背景图.jpg

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

    代码开发
    # -*- 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()
    

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


    greeting.jpg
    The End

    OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。
    代码、背景图、最终生成的词云,我打包上传百度云了,公众号回复萝莉获取下载地址,哈哈....
    期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。
    在之后的周一至五清晨7点10分,希望都能让清风Python的知识文章叫醒大家!谢谢……

    相关文章

      网友评论

          本文标题:使用python爬取B站“乔萝莉”弹幕并绘制词云,看看观众们的问

          本文链接:https://www.haomeiwen.com/subject/qjzorctx.html