爬取百大弹幕,大家还是喜欢上罗老师的课!

原来大家这么喜欢上课

    • 1.成果展示
    • 2.源代码展示及使用
      • 2.1获取弹幕文本
      • 2.2生成词云

1.成果展示

部分弹幕爬取

可爱和性感在猛男面前  不堪一击
试图招手让摄像走开(
讲道理,00子是融入小破站最用心的艺人了
金杯银杯不如老百姓的口碑
所以首先感谢我自己()
害怕
东尼东尼东尼东尼东尼东尼东尼东尼
老坛~
团长!!!
罗老师好
boy
boy
快进略过
来啦
啊啊啊啊
罗老师好
茄哥
鹤吱菌
哇
花海中的少年一路向北
你好坏哦!我好喜欢
哈哈哈哈
罗老师好
不客气!!
尼妹~
花海中的少年一路向北
哈哈哈哈哈哈哈哈
用爱发电
扯证的男孩
罗翔老师啊啊啊啊
挖帅的
比前面的舞蹈有趣
老板
是小卢才对
泛鸽鸽
秃凉
好哈哈哈哈
蕾丝还帅
xiye nb

词云展示
爬取百大弹幕,大家还是喜欢上罗老师的课!_第1张图片

2.源代码展示及使用

2.1获取弹幕文本

import requests
import json
import re


# 下载页面
def download_page(url):
    headers = {
        'user - agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 Edg/85.0.564.63'
    }
    res = requests.get(url=url, headers=headers)
    return res


# 根据av号获取cid
def get_cid(bv):
    """
    bv:b站视频的bv号:https://www.bilibili.com/video/BV1B54y1k7SB
    """
    bv = bv.strip('bv')
    url = f"https://api.bilibili.com/x/player/pagelist?bvid={bv}&jsonp=jsonp"
    res = download_page(url)
    res_text = res.text
    res_dict = json.loads(res_text)
    cid = res_dict['data'][0]['cid']
    return cid


# 根据cid请求弹幕

def get_dan_mu(cid):
    url = f'https://api.bilibili.com/x/v1/dm/list.so?oid={cid}'
    res = download_page(url)
    res_xml = res.content.decode('utf-8')
    pattern = re.compile('(.*?)')
    dan_mu_list = pattern.findall(res_xml)
    return dan_mu_list


# 解析家弹幕文件
# 保存弹幕文件
def save_to_file(dan_mu_list, filename):
    with open(filename, mode='w', encoding='utf-8') as f:
        for one_dan_mu in dan_mu_list:
            f.write(one_dan_mu)
            f.write("\n")


# 去爬取弹幕的主流程
def main(bv):
    cid = get_cid(bv)
    dan_mu_list = get_dan_mu(cid)
    save_to_file(dan_mu_list, f'{bv}.txt')


if (__name__ == '__main__'):
# 在此处填写你需要爬取的视频的BV号
    bv = 'BV1Sy4y117iz' 
    main(bv)

获取BV号,打开你喜欢的UP主在复制视频链接截取BV号即可
例如:## 标题https://www.bilibili.com/video/BV1c54y1W77q
漠叔的这个视频:

2.2生成词云

import jieba
from  wordcloud import WordCloud
# 读取弹幕文件
"""

"""
def read_file (file_name):
    with open(file_name,mode='r',encoding='utf-8')as f:
        dan_mu = f.read()
        return dan_mu
# 结巴分词
def jieba_cut(str):
    # 返回分词的列表
    jieba.suggest_freq('下次一定',tune=True)
    jieba.suggest_freq('老干爹',tune=True)
    cut_list = jieba.lcut(str)
    print(cut_list)
    return cut_list

# 生成词云图
def gen_word_cloud(cut_list,file_name):
    word_str = ''.join(cut_list)
    # 生成词云对象
    wc_setting = {
        'font_path':'msyh.ttc',
        'width':800,
        'height':500,
        'background_color':'white',
        'max_words':100
    }
    wc = WordCloud(**wc_setting).generate(word_str)
    # 保存到图片
    wc.to_file(file_name)
if __name__ == '__main__':
//这里的BV跟上面填写一致,就可以了,会生成以BV命名的图片
    bv = 'BV1Sy4y117iz'
    str =  read_file(f'{bv}.txt')
    cut_list = jieba_cut(str)
    gen_word_cloud(cut_list,f'{bv}.png')


在这里插入图片描述
最后希望大家可以去爬一爬自己喜欢的up!!!爬取百大弹幕,大家还是喜欢上罗老师的课!_第2张图片

你可能感兴趣的:(python学习,爬虫,up主,词云,python,bilibili)