精华内容
下载资源
问答
  • 2021-02-12 03:19:06

    简介:

    一款用于查询bilibili弹幕发送者的软件,输入视频号(需要保证视频有效且有弹幕)后对弹幕池中的弹幕按照发送时间(从新到旧的顺序)进行查询。操作简单,需要联网使用。

    查询结果以uid格式展示,找到目标后前往b站搜索该uid即可(例如:uid123456789)

    注意事项:

    ①将hash加密过的内容反查成真实的uid,这个过程耗费时间较长、内存较多,有很小的概率还会出现错误。

    ​    ​②爬取到信息后运用正则表达式进行搜索,弹幕中一些特殊符号可能造成干扰...这个比较恶心,但一般不会出现这样的弹幕。

    ​    ​③注意程序跑出来只有弹幕池的弹幕。一些视频弹幕量很大,一些弹幕被挤出弹幕池,不会被搜查到,弹幕多的视频弹幕池一般有几千。尽管这样程序运行时间依旧会很长,考虑用os.system('pause'),每匹配一段时间暂停一次,用户按任意键可以继续。

    ​    ​④遇到特殊的指令、高级、GAS弹幕可能出现乱码,这个不好搞...

    ​    ​⑤支持分p查询,输入格式 BV....?p=x 即可,注意视频必须存在x这一p,如果不存在,按x=1处理。

    ​    ​⑥爬取弹幕池内容,新发的排在前面,弹幕池指的是电脑端的弹幕列表。而不是总弹幕量。

    (其余内容请前往下面链接查看)(本人学生,自学python制作,欢迎大神指点)

    详细内容:https://sharewh.chaoxing.com/share/589f5a73-54dc-42ae-8ebe-83a9d6cacd33?t=3

    截图:

    55fd2b2273b5a8b4531f72773c469d6e.gif

    1 (2).png (149.34 KB, 下载次数: 0)

    2021-2-9 16:59 上传

    55fd2b2273b5a8b4531f72773c469d6e.gif

    1 (3).png (160.98 KB, 下载次数: 0)

    2021-2-9 16:59 上传

    下载地址:

    ①python封装的exe较大超出限制,请前往 https://sharewh.chaoxing.com/share/589f5a73-54dc-42ae-8ebe-83a9d6cacd33?t=3 寻找成品下载。

    7475c8e25616fa82a2fe85bc6ac87ac9.gif

    下载链接.txt

    (147 Bytes, 下载次数: 2)

    2021-2-9 17:12 上传

    点击文件名下载附件

    下载积分: 吾爱币 -2 CB

    更多相关内容
  • 主要介绍了Python爬虫爬取Bilibili弹幕过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 1.获取弹幕的url是以 .xml 结尾 2.弹幕url的所需参数在视频url响应的 javascript 中 先看代码 import requests from lxml import etree import re # 使用手机UA headers = { "User-Agent": "Mozilla/5.0 (iPhone; ...
  • Python 抓取 bilibili 弹幕并分析

    千次阅读 2019-11-26 20:30:00
    bilibili视频弹幕文件 url =  'https://comment.bilibili.com/123072475.xml' # 发送请求 response = requests.get(url) xml = etree.fromstring(response.content) # 解析数据 dm = xml.xpath( "/i/d/...

    作者| GitPython

    时隔一年,嵩哥带来他的新作《雨幕》。

    他依旧认真创作,追求高品质,作品在发表之前已听了五百遍以上。

    如此高品质的音乐,大家如何评价呢?通过哔哩哔哩上的视频弹幕,感受一下。

    01 实现思路

    首先,利用哔哩哔哩的弹幕接口,把数据保存到本地。接着,对数据进行分词。最后,做了评论的可视化。

    02 弹幕数据

    平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的数据格式进行加载的。

    比如:

    https://comment.bilibili.com/123072475.xml

     

    一个固定的url地址 + 视频的cid + .xml

    只要找到你想要的视频cid,替换这个url就可以爬取所有弹幕了(b站大部分网页给出的字幕限制是1000条)。

    一个视频的cid在哪里呢?

    右键网页,打开网页源代码,搜索 "cid": 就能找到:

    03 保存数据到本地

    有了数据的接口链接,我们就可以利用request模块,获取数据了。

    然后,再利用xpath简单的解析xml,就可以把所有的弹幕信息汇总到一个列表里了。最后,把列表转化成dataframe,保存到本地。

    # 许嵩新歌《雨幕》
    # bilibili视频弹幕文件
    url = 'https://comment.bilibili.com/123072475.xml'

    # 发送请求
    response = requests.get(url)
    xml = etree.fromstring(response.content)

    # 解析数据
    dm = xml.xpath("/i/d/text()")
    print(dm)  # list

    # 把列表转换成 dataframe
    dm_df = pd.DataFrame(dm, columns=['弹幕内容'])
    print(dm_df)

    # 存到本地
    # 解决了中文乱码问题
    dm_df.to_csv('雨幕-弹幕.csv', encoding='utf_8_sig')

    保存的csv数据:

    04 对数据进行分词

    制作词云前,需要把弹幕数据进行分词。

    关于jieba分词,可以参考:

    https://blog.csdn.net/dnxbjyj/article/details/72854460   

    # jieba分词
    dm_str = " ".join(dm)
    words_list = jieba.lcut(dm_str)  # 切分的是字符串,返回的是列表
    words_str = " ".join(words_list)

    05 词云可视化

    通过创建词云对象、设置词云参数,最终生成图片,保存到本地。

    # 读取本地文件
    backgroud_Image = plt.imread('1.jpg')

    # 创建词云
    wc = WordCloud(
        background_color='white',
        mask=backgroud_Image,
        font_path='./SourceHanSerifCN-Medium.otf',  # 设置本地字体

        max_words=2000,
        max_font_size=100,
        min_font_size=10,
        color_func=random_color_func,
        random_state=50,
    )

    word_cloud = wc.generate(words_str) # 产生词云
    word_cloud.to_file("yumu.jpg") #保存图片

    展开全文
  •  今天我们的爬虫内容是bilibili视频弹幕爬取,并保存到本地为JSON格式,正常爬虫只需要发送请求,解析相应内容,而爬取bilibili的内容,视频弹幕并没在响应的html中,而是保存在一个响应的url中,以XML格式保存,...
  • 这篇文章主要介绍了Python爬虫爬取Bilibili弹幕过程解析,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考一下。 IDE工具:Pycharm专业版 Python版本3.8 (社区版的朋友不能够使用Pycharm里面的...

    这篇文章主要介绍了Python爬虫爬取Bilibili弹幕过程解析,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考一下。

    IDE工具:Pycharm专业版
    Python版本3.8

    (社区版的朋友不能够使用Pycharm里面的数据库功能,可以考虑使用Excel保存方式)

    用到的第三方包:

    import re   #正则表达式
    from lxml import etree
    import requests #网页请求
    import jieba    #分词
    from matplotlib import pyplot as plt    #绘图,数据可视化
    from wordcloud import WordCloud     #词云
    from PIL import Image       #图片处理
    import numpy as np      #矩阵运算
    import sqlite3      #数据库
    

    1.分析如何得到弹幕的XML文件

    B站弹幕XML文件有一个固定的格式:

    https://api.bilibili.com/x/v1/dm/list.so?oid='+oid
    

    所以我们只需要获得到视频的oid值就可以了。

    弹幕的XML文件如下:
    在这里插入图片描述

    2.获取弹幕的oid值,oid的值一般都是8位,如77090984

    这里我有两种方法获取oid:

    方法一:

    (1)打开一个B站视频链接: https://www.bilibili.com/video/BV1db41117kP.
    (2)按F12,出现如下界面,按图示界面操作:在这里插入图片描述
    方法二:
    此方法是通过视频的av_id(aid)获取oid
    (1)按图示操作:在这里插入图片描述
    (2)利用代码找到oid的值

    注:对于这里cid和oid的区别我也分不清,明明是获取到cid的值,但是在getDatalist()中是oid=<此处获取到cid的值,如有清楚的大佬可以解释一下>

    python代码如下:

    # aid对应视频av号,通过视频av号获取oid
    def getOidByAid(av_id):
        # 向服务器发起一个请求,headers是进行伪装
        resp = requests.get('https://www.bilibili.com/video/av'+av_id,headers=headers)
        # 此处是正则表达式   
        match_rule = r'cid=(.*?)&aid'
        # 利用正则表达式匹配到相应的内容,再将'cid=''&aid'替换成空格符,就得到我们要的cid了
        oid = re.search(match_rule, resp.text).group().replace('cid=', '').replace('&aid', '')
        return oid
    

    效果如下:
    在这里插入图片描述

    3.获取弹幕的XML文件,对数据进行处理和保存

    爬取弹幕数据代码如下:

    # 通过oid访问弹幕的xml文件,进而获取弹幕数据
    def getDatalist(oid):
        xml_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+oid
        resp = requests.get(xml_url,headers=headers)
        xml = etree.HTML(resp.content)
        data_list = xml.xpath("//d/text()")
        return data_list
    

    保存弹幕数据代码如下:

    # 数据库的初始化  此处使用sqlite3数据库 专业版有数据库(pycharm最右边) 社区版没有
    def init_db(dbpath):
        print("正在创建数据表...")
        # 创建数据表
        sql = '''    
            create table bilibili
            (
                id integer primary key autoincrement,
                info text
            )
        '''
        conn = sqlite3.connect(dbpath)
        cursor = conn.cursor()
        cursor.execute(sql)
        conn.commit()
        conn.close()
        print("创建成功!")
    
    # 保存数据到数据库
    def saveDataByDb(datalist, dbpath):
        init_db(dbpath)
        print("开始保存数据...")
        conn = sqlite3.connect(dbpath)
        cursor = conn.cursor()
    
        for data in datalist:
            sql = '''
                   insert into bilibili(info)
                   values('%s') '''%data
            # print(sql)
            cursor.execute(sql)
            conn.commit()
        cursor.close()
        conn.commit()
        print("保存成功!")
    

    效果图:
    在这里插入图片描述

    4.词云的绘制

    词云图片的准备(tree.jpg):
    在这里插入图片描述

    代码如下:

    # 绘制词云
    def drawWordCloud():
        # 准备词云所需要的文字(词)
        conn = sqlite3.connect('movie.db')
        cur = conn.cursor()  # 创建游标
        sql = 'select info from bilibili'  # 创建sql语句
        data = cur.execute(sql)  # 执行sql语句
        text = ""  # 声明文本,用来保存数据
        for item in data:
            text = text + item[0]
        # print(text)
        cur.close()
        conn.close()
    
        # 分词
        cut = jieba.cut(text)  # 使用jieba分词
        string = ' '.join(cut)  # 将空格插入每两个词语之间
        # print(string)
    
        img = Image.open(r'tree.jpg')  # 打开遮罩图片
        img_array = np.array(img)  # 将图片转换成数组
        wc = WordCloud(
            background_color='white',  # 设置背景
            mask=img_array,  # 设置遮罩,也就是树的形状
            font_path="STSONG.TTF",  # 设置字体
        )
        wc.generate_from_text(string)  # 切词
    
        # 绘制图片
        fig = plt.figure(1)
        plt.imshow(wc)  # 将词云显示出来,也就是词语
        plt.axis('off')  # off为不显示坐标轴
    
        # plt.show()  #显示生成的词云图片
    
        # 输出词云图片到文件
        plt.savefig(r'word.jpg')
    

    绘制的结果(word.jpg):
    在这里插入图片描述
    最后附上主函数代码,将所有代码片组合起来就是一份完整的代码了

    if __name__ == '__main__':
        # print("开始爬取数据...")
        dbpath = "movie.db"
        av_id = '44013661'
        headers = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        }
        oid = getOidByAid(av_id)
        datalist = getDatalist(oid)
        saveDataByDb(datalist,dbpath)
        print("爬取完成!")
    
        # 绘制词云
        drawWordCloud()
    

    在这里插入图片描述
    希望能够对大家有所帮助!点赞收藏就是对我最大的支持,谢谢大家!

    创作不易,转载请注明出处

    展开全文
  • 可以通过UP主的视频空间地址爬取UP下的全部视频弹幕以及评论,并统一生成词云 注:评论下的评论暂不支持全量获取 支持继续爬取,调整禁闭/common/get_urls.py中的线程池=pool.ThreadPool(x)分子,但需要注意,B站...
  • 这篇文章主要介绍了Python爬虫爬取Bilibili弹幕过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先来思考一个问题,B站一个视频的弹幕最多会有多少? ...
  • bilibili_danmu Bilibili弹幕下载器(Python版)
  • python源码集锦-爬取bilibili弹幕消息
  • bilibili WebSocket直播弹幕监听 4.0 。@2936878706。
  • 总所周知bilibili是没有办法直接查看弹幕的发送者的,这使得当我们看到一些nt弹幕的时候虽然生气,却无可奈何,但是B站是可以屏蔽某个用户发送的弹幕的,这说明数据接口里肯定有用户信息,由于最近在学爬虫,所以我...
  • 作者|GitPython时隔一年,嵩哥带来他的新作《雨幕》。他依旧认真创作,追求高品质,作品在发表之前已听了...02弹幕数据平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的...

    71553c4ae4e244ca9cf31696a2b466c7.png

    作者|GitPython

    时隔一年,嵩哥带来他的新作《雨幕》。

    他依旧认真创作,追求高品质,作品在发表之前已听了五百遍以上。

    如此高品质的音乐,大家如何评价呢?通过哔哩哔哩上的视频弹幕,感受一下。

    01实现思路

    首先,利用哔哩哔哩的弹幕接口,把数据保存到本地。接着,对数据进行分词。最后,做了评论的可视化。

    02弹幕数据

    c095dc086e8686dc3fb0f854adbb1ca9.png

    平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的数据格式进行加载的。

    比如:

    https://comment.bilibili.com/123072475.xml

    一个固定的url地址 视频的cid .xml

    只要找到你想要的视频cid,替换这个url就可以爬取所有弹幕了(b站大部分网页给出的字幕限制是1000条)。

    一个视频的cid在哪里呢?

    右键网页,打开网页源代码,搜索"cid":就能找到:

    5c9d4afcb6e7fb3ac0087439aa8aaafd.png

    03保存数据到本地

    有了数据的接口链接,我们就可以利用request模块,获取数据了。

    然后,再利用xpath简单的解析xml,就可以把所有的弹幕信息汇总到一个列表里了。最后,把列表转化成dataframe,保存到本地。

    #许嵩新歌《雨幕》

    #bilibili视频弹幕文件

    url='https://comment.bilibili.com/123072475.xml'

    #发送请求

    response=requests.get(url)

    xml=etree.fromstring(response.content)

    #解析数据

    dm=xml.xpath("/i/d/text()")

    print(dm)#list

    #把列表转换成dataframe

    dm_df=pd.DataFrame(dm,columns=['弹幕内容'])

    print(dm_df)

    #存到本地

    #解决了中文乱码问题

    dm_df.to_csv('雨幕-弹幕.csv',encoding='utf_8_sig')

    保存的csv数据:

    48ae041546c6b2fdff929a0ffed3b428.png

    04对数据进行分词

    制作词云前,需要把弹幕数据进行分词。

    关于jieba分词,可以参考:

    #jieba分词

    dm_str="".join(dm)

    words_list=jieba.lcut(dm_str)#切分的是字符串,返回的是列表

    words_str="".join(words_list)

    05词云可视化

    通过创建词云对象、设置词云参数,最终生成图片,保存到本地。

    #读取本地文件

    backgroud_Image=plt.imread('1.jpg')

    #创建词云

    wc=WordCloud(

    background_color='white',

    mask=backgroud_Image,

    font_path='./SourceHanSerifCN-Medium.otf',#设置本地字体

    max_words=2000,

    max_font_size=100,

    min_font_size=10,

    color_func=random_color_func,

    random_state=50,

    )

    word_cloud=wc.generate(words_str)#产生词云

    word_cloud.to_file("yumu.jpg")#保存图片

    d6e7fc0cb3e319c708dec0690e5e4f51.png

    展开全文
  • bilibili下载弹幕的代码 python实现
  • 文章目录1. 分析数据2. 数据提取3. 云图生成总结 先来个最终实现的效果: 输入一个bilibili的视频地址,生成这个视频弹幕的云图。 1. 分析数据 2. 数据提取 3. 云图生成 总结 ...
  • 由于自己学艺不精,后续词云的简略代码没怎么看懂,梳理了一遍把整个的学习内容记录下来。... 自己的环境:python3.7;...#爬取bilibili弹幕 from bilibili_api import Verify from bilibili_api.vide
  • 创作灵感来源于https://blog.csdn.net/qq_43735106/article/details/106039126?utm_medium=distribute.pc_category.none-task-blog-hot-7.nonecase,这篇文章爬去了后浪的“弹幕”,但是大家仔细观察一下爬去下来的...
  • Python爬取bilibili弹幕并生成词云 目标网站: 我这里以 TES vs SN 第四场决胜局为例: 探索经历: 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多...
  • 通过bilibili_api获取bilibili弹幕+绘制词云的方法 刚接触python 随手做一些自己感兴趣的项目,看到了一个通过bilibili_api三行代码获取弹幕的教程(vx公号:天作之程(jhtmtzzc))使用的是bilibili_api ,是2020年1...
  • 时隔一年,嵩哥带来他的新作《雨幕》。他依旧认真创作,追求高品质,作品在发表...02 弹幕数据平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的数据格式进行加载的。...
  • 获取bilibili视频弹幕后存储到txt文件中,本篇博文将txt文件中的博文做一个可视化的展示,可视化的方式采用了词云图的方式
  • 1 #-*- coding: utf-8 -*-2 #@author: Tele3 #@Time : 2019/04/09 下午 4:504 #爬取弹幕5 importrequests6 importjson7 importos8 from lxml importetree91011 defmain():12 headers ={13 "User-Agent": "Moz...
  • 项目实现(1)获取弹幕数据,我本来想着是获取某一个up的全部视频的弹幕数据,后来发现了一个问题:弹幕数据是存在JSON或者XMl中的。数据依靠一个id号标识,我本以为就是视频的av号,结果查看元素后却发现不是。参考了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,164
精华内容 865
关键字:

python如何获取bilibili的弹幕