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

2019-07-31  本文已影响0人  清风Python
他有个想法

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

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

大家都知道,一般出现这种娱乐新闻,哪个网站最活跃?如果不知道我来提示你一句,我喜欢唱跳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的知识文章叫醒大家!谢谢……

上一篇下一篇

猜你喜欢

热点阅读