爬取B站弹幕制作词云图

大家好,我是天空之城,今天给大家带来,爬取B站弹幕制作词云图。

以下内容部分来自公众号数据分析与统计学之美,号主是大牛,有需要的加他。

首先打开一个b站视频https://www.bilibili.com/video/BV1PK4y1b7dt?t=1,

来到开发者模式,打开network,搜索pagelist,就会找到第一个api接口,https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp,

打开这个网址,我们就会发现一个cid号码,{“code”:0,“message”:“0”,“ttl”:1,“data”:[{“cid”:201056987,“page”:1,“from”:“vupload”,“part”:“JAY-MOJITO_完整MV(更新版)”,“duration”:189,“vid”:"",“weblink”:"",“dimension”:{“width”:1920,“height”:1080,“rotate”:0}}]},

把这个cid号码跟下面这个api网址oid号码拼接,

就可以得到我们想要的弹幕网址https://api.bilibili.com/x/v1/dm/list.so?oid=XXX

下面就水到渠成了


# 数据的爬取

#%%

import requests
import json
import chardet
import re
from pprint import pprint
# 1.根据bvid请求得到cid
def get_cid():
    url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp'
    res = requests.get(url).text
    json_dict = json.loads(res)
    #pprint(json_dict)
    return json_dict["data"][0]["cid"]

# 2.根据cid请求弹幕,解析弹幕得到最终的数据
"""
注意:哔哩哔哩的网页现在已经换了,那个list.so接口已经找不到,但是我们现在记住这个接口就行了。
"""
def get_data(cid):
    final_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=" + str(cid)
    final_res = requests.get(final_url)
    final_res.encoding = chardet.detect(final_res.content)['encoding']
    final_res = final_res.text
    pattern = re.compile('<d.*?>(.*?)</d>')
    data = pattern.findall(final_res)
    #pprint(final_res)
    return data

# 3.保存弹幕列表
def save_to_file(data):
    with open("dan_mu.txt", mode="w", encoding="utf-8") as f:
        for i in data:
            f.write(i)
            f.write("\n")

cid = get_cid()
data = get_data(cid)
save_to_file(data)

#%% md

# 词云图的制作

#%%

import pandas as pd
import numpy as np
import re
import jieba

# %%

# 读取评论数据
df = pd.read_csv('danmu2.csv', header=0, encoding='utf-8').astype(str)


# df.head()

# %%

def filter_str(desstr, restr=''):
    # 过滤除中文以外的其他字符
    res = re.compile("[^\u4e00-\u9fa5^,^,^.^。^【^】^(^)^(^)^“^”^-^!^!^?^?^]")
    return res.sub(restr, desstr)


# %%

df['text'] = df['text'].apply(filter_str)
df.head()


# %% md

## jieba分词

# %%

def get_cut_words(content_series):
    # 读入停用词表
    stop_words = []

    with open("stop_words.txt", 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            stop_words.append(line.strip())

    # 添加关键词
    my_words = ['a', 'b']
    for i in my_words:
        jieba.add_word(i)

        # 自定义停用词
    my_stop_words = []
    stop_words.extend(my_stop_words)

    # 分词
    word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)

    # 条件筛选
    word_num_selected = [i for i in word_num if i not in stop_words and len(i) >= 2]

    return word_num_selected


# %%

text1 = get_cut_words(content_series=df.text)
text1[:5]




import stylecloud
from IPython.display import Image

stylecloud.gen_stylecloud(text=' '.join(text1), collocations=False,
                          # palette='cartocolors.qualitative.Pastel_5',
                          font_path=r'‪C:\Windows\Fonts\msyh.ttc',
                          #icon_name='fas fa-dragon',
                          #icon_name='fas fa-dog',
                          #icon_name='fas fa-cat',
                          #icon_name='fas fa-dove',
                          icon_name='fab fa-qq',
                          # icon_name='fas fa-plane',
                          icon_name='fas fa-smile',
                          size=400,
                          output_name='词云1.png')


在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

还可以更改配色参数,让词云图实现不同的颜色
https://jiffyclub.github.io/palettable/tableau/

palette=‘tableau.BlueRed_6’,

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值