精华内容
下载资源
问答
  • B站弹幕api

    2021-02-03 15:53:57
    B站最近(或者不是很近?)更新了弹幕的加载逻辑,现在...但以前的弹幕api仍然(暂时)有效,以https://www.bilibili.com/video/av288554260为例: XML https://comment.bilibili.com/284038161.xml https://api.bili

    B站最近(或者不是很近?)更新了弹幕的加载逻辑,现在是在最开始加载一个json弹幕分片(protobuf格式文件seg.so),时长大概6分钟。若视频时长大于6分钟,则在播放器里视频时间超过6分钟时加载第2个分片。如果视频时长更长依次有更多的分片。


    但以前的弹幕api仍然(暂时)有效,以https://www.bilibili.com/video/av288554260为例:

    展开全文
  • 写在前面今天和朋友唠嗑,说...于是就想着用python来试试爬取B站的弹幕和三连了代码不废话了,先上代码:# 爬取B站弹幕import requestsimport timeimport jsonfrom lxml import etree# 放入要爬的url# 弹幕apiurl_b = ...

    写在前面

    今天和朋友唠嗑,说着说着说到了爬取B站弹幕和三连的事情。于是就想着用python来试试爬取B站的弹幕和三连了

    代码

    不废话了,先上代码:

    # 爬取B站弹幕

    import requests

    import time

    import json

    from lxml import etree

    # 放入要爬的url

    # 弹幕api

    url_b = "https://api.bilibili.com/x/v1/dm/list.so?oid=186339235"

    # 三连api

    url_state = "https://api.bilibili.com/x/web-interface/archive/stat?aid=925611776"

    # 设置header

    header = {"user-agent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) "

    + "AppleWebKit/537.36 (KHTML, like Gecko)"

    + " Chrome/80.0.3987.116 Mobile Safari/537.36"}

    # 获取信息

    try:

    # 延时操作,防止爬的太快

    time.sleep(0.5)

    response = requests.get(url_b, headers=header)

    except Exception as e:

    print(e)

    else:

    if response.status_code == 200:

    # 下载xml文件

    with open("bilibili.xml", 'wb') as f:

    f.write(response.content)

    # 解析网页

    time.sleep(1)

    # 文件路径,html解析器

    html = etree.parse('bilibili.xml', etree.HTMLParser())

    # xpath解析,获取当前所有的d标签

    results = html.xpath('//d//text()')

    i = 0

    sum_self = 0

    for result in results:

    sum_self = sum_self + 1

    if result.find("飞"):

    i = i+1

    print("总数为: %d 包含飞字的弹幕为:%d" % (sum_self, i))

    data_get = requests.get(url_state, headers=header)

    data_san = json.loads(data_get.content.decode())

    print("硬币为:%d" % data_san['data']['coin'])

    print("转发为: %d" % data_san['data']['share'])

    print("点赞为:%d" % data_san['data']['like'])

    这里关于找api的操作,可以自行用火狐或者谷歌的开发者模式去寻找。

    在这里由于B站的弹幕是用xml存的,且最大弹幕量是1000,即只爬了一千条弹幕。

    思路分析

    首先找一个B站视频,然后寻找弹幕和三连的API:

    1805770-20200520095606519-310273807.png

    首先发现了这个,阅读英文后发现明显就是三连的英文。

    就是简单的json格式,关于json格式的处理已经练习过嘞

    然后找弹幕,发现是xml文件:

    1805770-20200520095729656-1688094931.png

    观察结构可以发现弹幕都是在d标签里的。上次爬取论文的时候也用了类似的操作,我们直接读取d标签的内容即可。

    这里我们就用xpath来很方便的找到。关于xpath的语法等有空再开个博客写一写。

    结果

    1805770-20200520095833613-1968952181.png

    可以看到爬取B站弹幕和三连非常方便,也体会到了python在某些领域的优势。

    展开全文
  • b站近期更新了弹幕接口返回的数据结构,我通过逆向JS代码进行研究,下面是研究成果。 API调用 GET https://api.bilibili.com/x/v2/dm/web/seg.so 参数: 键 值 oid 分P编号,也称为cid type 1 segment_...

    前言

    b站近期更新了弹幕接口返回的数据结构,我通过逆向JS代码进行研究,下面是研究成果。

    API调用

    GET https://api.bilibili.com/x/v2/dm/web/seg.so

    参数:


    oid 分P编号,也称为cid
    type 1
    segment_index 1

    返回

    请求正确:二进制数据流,需要解析后才能查看。

    请求错误:JSON格式,结构是b站标准API数据结构。并附有错误信息。

    返回数据流解析

    应进行逐个字节解析。数据包以单条弹幕为单位。

    以下面的数据为例:

    0a45088780e0cdd4add64610ba011801201928ffffff07320831366333653632303a03e5a5bd40a38cb1fc05480162113339373836323937363339333035323233709fdaedba020a48088580a0a0c5aed64610ba011801201928ffffff07320831366333653632303a0632333333333340dd8cb1fc05480462113339373836333237383737303931333333709fdaedba020a53088380c0fed78fe94610c7ec021801201928ffffff073207343536623964333a12e783ad2020e8a1802020e6b2b82020e885be408edabafc0548076211333938363838333036333834303736383370fede99540a4e08838080e5e1c9ea4610ab89021801201928ffffff07320831333263353138643a0ce8bf99e4b99fe8a18cefbc8140b1b9bbfc054805621133393837353232343138303632313331357099a394090a45088580a093ff8db44710b881011801201928ffffff07320837616236656565653a026e6240b98ce1fc0548036211343031393836323539313937363234333770a6adccf8010a45088780a0fcb7fabb4710b199011801201928ffffff07320833323865356634333a026e6240dc8ee5fc05480562113430323333313338333439363730343037709feedfac020a57088580e0ddecb3bf471093b8031801201928ffffff07320833373032356533643a15e5bbbae8aeaee5869be8aeade694bee8bf99e9a69640dcf0e6fc05480162113430323438333035313537343036373235708f928230
    

    数据太长了,我拆其中一条弹幕数据出来:

    0a
    45
    08 8780e0cdd4add646
    10 ba01
    18 01
    20 19
    28 ffffff07
    32 08 3136633365363230
    3a 03 e5a5bd
    40 a38cb1fc05
    48 01
    62 11 3339373836323937363339
    // 这一段不知道什么意思,我逆向JS后看官方也没有解析这段。
    333035323233709fdaedba02
    

    0x0a 标识接下来的数据是单条弹幕。

    紧接着的 0x45 标识数据主体长度,即后面的数据总长度。

    接下来就是数据主体。第一个字节是数据类型,如0x08

    这里要注意,所有 数据类型 需要进行 右移3 才是正确的数据类型,比如 0x08 >> 3 = 0x01,这个 0x01 就是数据类型了,之后有个对照表可以参考各值的意义。

    一共有两种数据类型。

    STRING: 字符串类型,数据格式:类型 长度 数据主体

    VARINT: 变长整数。

    如果是字符串,则后面还要跟着标识该字符串长度的VARINT类型数据。比如 32 08 3136633365363230 这段数据,0x32 >> 8 = 6,查之后的表得知是弹幕发送者crc32值,类型是字符串。所以后面的 0x08 就是指示字符串长度的VARINT,进行解码后得出字符串长度为8(因为数字比较小所以编码和解码后的值都是一样的),后面的31 36 63 33 65 36 32 30刚好8位,就是数据主体了。

    关于 VARINT

    对于变长整数,需要把剩下的数据流全部传入处理,因为比较特殊。这里我截取出变长的部分出来进行解释。

    0xba01 为例,二进制表示如下:

    1011 1010 0000 0001

    第一个字节最高位是 1 ,代表下一个字节还是该数据的有效部分,我们去掉最高位,加入真实数据:

    011 1010

    注意前面不要补0。

    第二个字节最高位是 0 ,说明这个字节已经是最后一个字节了。我们直接将该字节接在真实数据 前面(将该字节左移7然后加上之前的数据)

    0000 0001011 1010

    转换为十进制,这个就是真实数据 186 了。


    接下来继续解释数据格式。

    类型编号 数据类型 解释
    1 VARINT 弹幕ID
    2 VARINT 弹幕出现位置(毫秒)
    3 VARINT 弹幕模式(顶部、飞行、底部)
    4 VARINT 弹幕字体大小
    5 VARINT 弹幕颜色
    6 STRING 弹幕发送者crc32值,编码方式:crc32(b"123456")
    7 STRING 弹幕内容
    8 VARINT 弹幕发送时间戳
    9 VARINT weight,不知道什么意思
    10 STRING action,不知道什么意思
    11 VARINT pool,不知道什么意思
    12 STRING 弹幕ID的字符串格式编码
    13 VARINT attr,不知道什么意思

    不是所有数据都会出现在单条弹幕数据里头的。可能是未来保留备用。

    逆向JS后官方是这么写的(截取部分):

    // t就是数据类型,m是弹幕class,r是原始数据(b站自己写的一个Reader)
    switch(t>>>3){
        case 1:
            m.id=r.int64()
            break
        case 2:
            m.progress=r.int32()
            break
        case 3:
            m.mode=r.int32()
            break
        case 4:
            m.fontsize=r.int32()
            break
        case 5:
            m.color=r.uint32()
            break
        case 6:
            m.midHash=r.string()
            break
        case 7:
            m.content=r.string()
            break
        case 8:
            m.ctime=r.int64()
            break
        case 9:
            m.weight=r.int32()
            break
        case 10:
            m.action=r.string()
            break
        case 11:
            m.pool=r.int32()
            break
        case 12:
            m.idStr=r.string()
            break
        case 13:
            m.attr=r.int32()
            break
        default:
            r.skipType(t&7)
            break
    }
    

    顺便推荐一下我写的Python库 bilibili_api。里面用到了以上的技术。

    如果你有新发现欢迎在 Issue 补充说明!

    我的博客,欢迎进来看看~_(:з」∠)_

    喵帕斯小窝 - Passkou的个人博客

    展开全文
  • 前言关于这个小项目的由来。最开始是想要利用b站弹幕进行...开码一丶利用 POST 方式获取 B 直播弹幕参考:【python】b站直播弹幕获取首先,随便打开一个b站的直播页面,按F12打开控制台,点进“网络(Network...

    前言

    关于这个小项目的由来。

    最开始是想要利用b站的弹幕进行一些互动之类的。原本也有想过可以利用现有的弹幕姬做个插件来解决的,但无奈不会C#,所以只能自己研究b站的弹幕协议。

    后来有写过一个C++版本的,不过有一些小问题,这在后文中会提到。

    开码

    一丶利用 POST 方式获取 B 站直播弹幕

    参考:【python】b站直播弹幕获取

    首先,随便打开一个b站的直播页面,按F12打开控制台,点进“网络(Network)”标签,刷新一下,然后审计一下里面的内容,可以找到“gethistory”这个文件里面就是我们要的弹幕了。

    90f045b106cfcebd57ed618d28d232aa

    实际上,仔细观察便不难发现,请求 gethistory 的时候返回的是请求时最近的10条历史弹幕,不过根据这些就可以写出来一个简易的弹幕姬了。具体做法就是每隔一定的时间请求一次,然后与上次的请求做对比。不同的部分就是这段时间新发的弹幕了,这样就可以对弹幕进行一些操作了。

    我们点进“headers”标签:

    9af260662a1e4cf14be28539047b2b3b

    有了这些我们就可以开写一个弹幕姬了。

    虽然headers很乱,不过实际上我们在请求弹幕的时候并不需要这么多headers,具体哪些headers是必要的可以用实验试出来,不过具体过程和结果我就直接略去了。最后的代码可以参考:

    B站直播弹幕爬取

    或我自己写的C++版本:

    【笔记/学习】c++实现b站弹幕姬

    (代码有点长而且不是本文的重点这里就不放了)

    注:之前的时候获取弹幕的URL是:https://api.live.bilibili.com/ajax/msg,不过我写这篇文再去复现的时候发现这个URL已经没了,经过观察发现变成了 https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory 截至写文时二者都能用。不过这些都不是重点了。

    二丶利用 WebSocket 获取 B 站弹幕

    前文利用 POST 的方式获取B站弹幕。这种方法虽然简单,但也有不方便的地方。我设的时间间隔为3s,但如果3s内发送的弹幕数量超过了10条,这种方法就会丢失一部分的弹幕,而如果简单的减小时间间隔,不仅会占用更多的网络资源,如果太过频繁的话还可能会被封IP。

    而 HTTP 请求的这种缺陷也正好就是 WebSocket 的出现所为了解决的问题。事实上,我们在看B站直播的时候正是通过 WebSocket 的方式与服务器通信的。

    让我们继续打开 F12 :

    94ebb8d91fa935532d34b8ba50d5eb56

    这个sub 就是与弹幕服务器通信的 WebSocket 啦。

    点进 Message 标签,会看见一大堆东西。不过我们并不需要自己去研究这个通信协议,在 Github 上已经有了B站的API可以直接使用。

    弹幕WS协议

    API文档使用 JavaScript 写的,不过这并不妨碍我们移植一个 Python 版本的。

    由 API 可知,我们与服务器进行通信所发送的数据大多是 json 的数据,偶尔还会有 zlib 数据。所以我们自然需要导入这两个包。我们与服务器使用 WebSocket 进行通信,但原生 Python 并不能直接发送 WebSocket,我们自然也不可能使用 socket 去造轮子。不过好在已经有很多好用的 WebSocket 的库可供我们使用了。

    目前常用的 WebSocket 库有: websocket-client, websockets, aiowebsocket 三个。其中 websocket-client 是同步的,因为我们在收弹幕的同时还得要发送心跳包才能不被服务器断开连接,使用异步io会方便一些。所以不用他。另外两个我也都试过。感觉上 aiowebsocket 更稳定一些,所以这里我们使用这个库。

    安装:

    pip install aiowebsocket

    除了aiowebsocket 要安装外,其他的库都是 python 自带的,直接导入就行了。自然不要忘了用了异步操作要加上 asyncio 库哦。

    import asyncio

    import zlib

    from aiowebsocket.converses import AioWebSocket

    import json

    之后我们写好入口函数:

    if __name__ == '__main__':

    remote = 'wss://broadcastlv.chat.bilibili.com:2245/sub'

    try:

    asyncio.get_event_loop().run_until_complete(startup(remote))

    except KeyboardInterrupt as exc:

    pring('Quit.')

    remote 自然就是API中弹幕服务器的地址了。然后是startup()

    roomid = '5322'

    data_raw='000000{headerLen}0010000100000007000000017b22726f6f6d6964223a{roomid}7d'

    data_raw=data_raw.format(headerLen=hex(27+len(roomid))[2:], roomid=''.join(map(lambda x:hex(ord(x))[2:],list(roomid))))

    async def startup(url):

    async with AioWebSocket(url) as aws:

    converse = aws.manipulator

    await converse.send(bytes.fromhex(data_raw))

    tasks=[receDM(converse), sendHeartBeat(converse)]

    await asyncio.wait(tasks)

    在连接到弹幕服务器后必须先发一个数据包写出进入的房间,否则连接会被断开。这里我是直接从浏览器抄的。数据包中的包长度必须要正确,所以这里要计算一下包长度。

    然后这里先把接受弹幕的receDM() 和发送心跳包的 sendHeartBeat 先写好。接下来是这两个函数:

    hb = '00000010001000010000000200000001'

    async def sendHeartBeat(websocket):

    while True:

    await asyncio.sleep(30)

    await websocket.send(bytes.fromhex(hb))

    print('[Notice] Sent HeartBeat.')

    async def receDM(websocket):

    while True:

    recv_text = await websocket.receive()

    printDM(recv_text)

    B站的弹幕服务器是如果70秒没有心跳就断开连接,这里是30s发送一次。因为只需要发一个没有内容的数据包就行了,所以这里也是直接从浏览器抄的。。

    对于接收到的数据包的处理比较复杂,这里我们单独写一个函数来处理它。

    首先,由API我们可以看到每个数据包的头部是怎样的:

    位置

    0-3

    4-5

    6-7

    8-11

    12-15

    16-

    说明

    数据包长度

    数据包头部长度

    协议版本

    操作类型

    数据包头部长度

    数据包内容

    不过这些内容我们并不都需要用到。

    下面上代码,具体说明在注释中写了:

    # 将数据包传入:

    def printDM(data):

    # 获取数据包的长度,版本和操作类型

    packetLen = int(data[:4].hex(),16)

    ver = int(data[6:8].hex(),16)

    op = int(data[8:12].hex(),16)

    # 有的时候可能会两个数据包连在一起发过来,所以利用前面的数据包长度判断,

    if(len(data)>packetLen):

    printDM(data[packetLen:])

    data=data[:packetLen]

    # 有时会发送过来 zlib 压缩的数据包,这个时候要去解压。

    if(ver == 2):

    data = zlib.decompress(data)

    printDM(data)

    print('db3')

    return

    # ver 为1的时候为进入房间后或心跳包服务器的回应。op 为3的时候为房间的人气值。

    if(ver == 1):

    if(op == 3):

    print('[RENQI] {}'.format(int(data[16:].hex(),16)))

    return

    # ver 不为2也不为1目前就只能是0了,也就是普通的 json 数据。

    # op 为5意味着这是通知消息,cmd 基本就那几个了。

    if(op==5):

    try:

    jd = json.loads(data[16:].decode('utf-8', errors='ignore'))

    if(jd['cmd']=='DANMU_MSG'):

    print('[DANMU] ', jd['info'][2][1], ': ', jd['info'][1])

    elif(jd['cmd']=='SEND_GIFT'):

    print('[GITT]',jd['data']['uname'], ' ', jd['data']['action'], ' ', jd['data']['num'], 'x', jd['data']['giftName'])

    elif(jd['cmd']=='LIVE'):

    print('[Notice] LIVE Start!')

    elif(jd['cmd']=='PREPARING'):

    print('[Notice] LIVE Ended!')

    else:

    print('[OTHER] ', jd['cmd'])

    except Exception as e:

    pass

    这样,一个简单的弹幕姬就完成了!

    三丶试试搞一些其他的事情吧!

    至此,我们已经有了一个可以在控制台输出弹幕内容的弹幕姬了。不过,这并不是结束,有了这个我们就可以利用弹幕搞事情了(

    先放个简单的功能:

    把弹幕保存至本地

    先到如下时间:

    import time

    然后我们把前面的print()函数改掉:

    def log(typ, body):

    with open('D:/danmu.txt','a') as fd:

    fd.write(time.strftime("[%H:%M:%S] ", time.localtime()))

    fd.write(body+'\n')

    这样就可以爬取弹幕到本地了。

    利用SAPI朗读弹幕

    利用 SAPI 朗读需要导入相应的包:

    import win32com.client

    然后改写log函数:

    def log(typ, body):

    speak = win32com.client.Dispatch("SAPI.SpVoice")

    #创建发声对象

    speak.Speak(body)

    #使用发生对象读取文字

    with open('D:/danmu.txt','a') as fd:

    fd.write(time.strftime("[%H:%M:%S] ", time.localtime()))

    fd.write(body+'\n')

    来使python自动朗读弹幕。

    一般 Windows 都可以直接使用,不能用的话再上网查吧。。

    利用聊天机器人实现自动聊天

    首先打开b站一个直播间,发条弹幕截下包:

    ca6c37911a73df7ac7d7515fc4f93038

    照着参考,可以大致写出一份发送弹幕的python脚本

    import requests

    import timeform_data = {

    'color': '65532',

    'fontsize': '25',

    'mode': '1',

    'msg': 'test',

    'rnd': int(time.time()),

    'roomid': '1136753',

    'csrf_token': 'cce335cbfa5bfd292a049b813175bd12',

    'csrf': 'cce335cbfa5bfd292a049b813175bd12'

    }

    # 设置cookie值帮助我们在发送弹幕的时候,服务器识别我们的身份

    cookie = { '你的cookie(上图红色部分)' }

    res = requests.post('https://api.live.bilibili.com/msg/send', cookies=cookie, data=form_data)

    print (res.status_code)

    上面的csrf 和 csrf_token 在使用的时候最好也换成自己的。

    然后可以去注册图灵机器人/思知机器人等API(不推荐图灵,之前还好,后来一去看感觉有点贵),申请到 appid。

    具体可以参考我以前写的这篇文章

    最后代码差不多是这样:

    def talk(msg):

    form_data = {

    'color': '65532',

    'fontsize': '25',

    'mode': '1',

    'msg': 'test',

    'rnd': int(time.time()),

    'roomid': roomid,

    'csrf_token': 'cce335cbfa5bfd292a049b813175bd12',

    'csrf': 'cce335cbfa5bfd292a049b813175bd12'

    }

    cookie = { '你的cookie(上图红色部分)' }

    payload = {

    'appid': '你的appid',

    'userid': '1234',

    }

    payload['spoken'] = msg

    res1 = requests.get("https://api.ownthink.com/bot", params=payload)

    form_data['msg'] = res1.json()['data']['info']['text']

    res2 = requests.post('https://api.live.bilibili.com/msg/send', cookies=cookie, data=form_data)

    好啦,去直播间发条弹幕看看效果:

    7109cd7d0ac754a8d02cf4bab28f2277

    注意使用的时候加上限制不要对机器人的回复再去回复就行了

    。。。

    后记

    嗯。。。暂时就先写这么多吧,还有什么要补充的以后再说吧。。

    源码什么的之后再传吧。。

    点赞

    收藏

    分享

    文章举报

    d2c3be6a770e0ea15cedcad39a918348

    e1089cbef1b3fe9d76f1d8e0af658b17.png

    Panedioic

    发布了2 篇原创文章 · 获赞 0 · 访问量 79

    私信

    关注

    展开全文
  • 目录SRE实战 互联网时代...爬取弹幕1. 从手机端口进入网页爬取找到接口2.代码import requestsfrom lxml import etreeimport numpy as npurl='https://api.bilibili.com/x/v1/dm/list.so?oid=198835779'headers= {...
  • 感谢原理概念cid: 爬取弹幕需要的id号,可以由BV号通过API接口获得步骤BV转cid浏览器输入:https://api.bilibili.com/x/player/pagelist?bvid=BV1x54y1e7zf&jsonp=jsonpcid=226204073由cid得到当日条数小于1000的...
  • 最近有朋友在群上面说做个b站某视频的弹幕统计列表,筛选出弹幕最多的那条!那么如何解决这个问题呢?首先肯定是要获取弹幕的列表吧,然后再进行分析吧。筛选出弹幕最多的那条,这个好办用collections可以解决,那么...
  • 自己抓包研究是不可能的,前人肯定都帮我们踩过坑了,所以我这种技术渣渣肯定要在搜索引擎上搜寻资料的,B站弹幕接口,这篇文章很详细地介绍了B站弹幕API的各个参数。 B站弹幕API格式:...
  • B站弹幕接口

    千次阅读 多人点赞 2019-01-26 17:57:26
    一、B站弹幕api接口 1.'https://comment.bilibili.com/' + cid + '.xml' 2.'https://api.bilibili.com/x/v1/dm/list.so?oid=' + cid e.g: cid = 72540443...
  • 前几天我做了B站《后浪》视频的弹幕分析,感兴趣的朋友可以去B站看一下现在我将在制作这个视频背后用到的文本分析相关的关键技术点做一个总结,因为涉及知识点太多,有些点会一笔带过,着重讲一些主要的点。...
  • 使用Python爬取B站弹幕

    2019-09-15 11:58:51
    爬取B站弹幕说着简单实现难,你不仅仅要找到弹幕视频的api接口 还要掌握一系列的表达式及编程语法 但是 我并不慌,身为一名没多少进ICU的996患者(误) 让我们开始coding吧! 使用语言:...
  • 一、写在前面之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样一个简单的尝试,从搭建环境到跑通demo,不懂语法,不知含义,装好环境,查到API,跑通Demo,就是目标!...
  • 哔哩哔哩弹幕api查找

    千次阅读 2019-01-07 12:07:59
    哔哩哔哩弹幕api查找 以那年那兔那些事为例: 由于B站弹幕库一次只能显示一千条,要进行舆论分析要进行所有的弹幕分析,所以先找一找有没有可以利用的api 打开网页F12打开开发者模式点到network页面,什么都没有,...
  • 以前b站弹幕接口是这个: https://api.bilibili.com/x/v1/dm/list.so 返回的是 XML 格式的信息,非常容易解析。 但是,不知道什么时候开始,b站弹幕接口进行了更新,这个接口现在也被废弃了,改成了下面这个: ...
  • 【kimol君的无聊小发明】—用python爬取B站弹幕(无数量限制)前言一、弹幕抓取(有数量限制)二、弹幕抓取(无数量限制)写在最后 前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以...
  • 分析网页视频地址:https://www.bilibili.com/video/BV19E411W7BE本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀。这次我选取的是自己唯一的爆款视频。就是下面这个。希望大家...
  • 原本也有想过可以利用现有的弹幕姬做个插件来解决的,但无奈不会C#,所以只能自己研究b站弹幕协议。 后来有写过一个C++版本的,不过有一些小问题,这在后文中会提到。 开码 一丶利用 POST 方式获取 B 直播弹幕 ...
  • 卧槽!原来爬取B站弹幕这么简单

    万次阅读 多人点赞 2020-11-07 11:58:00
    公众号后台回复“图书“,了解更多号主新书内容作者:叶庭云,https://blog.csdn.net/fyfugoyfa一、分析网页二、获取弹幕数据三、绘制词云图视频链接:https:...
  • 【爬虫】B站视频弹幕爬取

    千次阅读 2020-11-17 20:43:31
    通过查找B站的API,找到B站弹幕API 'https://api.bilibili.com/x/v2/dm/history?type=1&oid='+cid+'&date='+time 其中cid是视频id,time是弹幕时间 在heartbeat中找到cid time可以在视频上方获取 同样存在...
  • Python爬取B站弹幕方法介绍

    千次阅读 多人点赞 2020-08-04 21:47:46
    文章目录Python爬取B站弹幕方法介绍前言寻找弹幕数据编写爬虫B站弹幕数量新技术介绍参考文章 前言 最近同学要做东西,需要用 B 的视频对应的弹幕数据做分析,于是请我帮忙爬取 B 视频的弹幕数据。 对于爬虫而言...
  • B站弹幕爬虫

    千次阅读 2020-02-03 18:48:41
    作者:Huangwei AI 来源:Python与机器学习之路前言B站作为弹幕文化的代表,有着非常丰富的弹幕资源。今天我们尝试对B站弹幕进行爬虫并且绘制词云图展示爬虫...
  • 爬取b站弹幕

    千次阅读 2020-02-08 21:59:18
    爬取b站弹幕 前段时间爬取了b站弹幕,现在记录一下心得体会 前期准备 HTML解析 找到弹幕所在的json响应文件,发现里面有1000多条实时弹幕 分析参数: 只有视频的主键标识 oid 变法找到 oid 抓取下来(我是想着...
  • 【爬虫】简单十行代码爬取B站B站弹幕
  • Python爬取B站弹幕数据并获取弹幕数量最多数据网站分析最终代码 我们以郑老师申论课为例子进行分析 ...B站弹幕数据在https://api.bilibili.com/x/v1/dm/list.so这个URL中,现在已经在B站抓包已经抓
  • 特效描述:利用jQuery实现 仿哔哩哔哩 视频弹幕代码。利用jQuery实现仿哔哩哔哩视频弹幕代码代码结构1. 引入CSS2. 引入JS3. HTML代码24人正在观看,100条弹幕时间发送内容用户类型加载中console.log(" %c 该项目基于...
  • 爬取B站弹幕

    千次阅读 2019-01-18 16:59:51
    最近几天学习爬虫,便爬取了B站弹幕,本篇博文记录的是爬取弹幕的方法一,近期会更新方法二。 下面是流程: 1.随意打开一个B站视频,按F12,点开network按键,在左上方的输入区输入 list 便可找到相应的弹幕...
  • Android弹幕实现:基于B站弹幕开源系统(2)在附录1的基础上,模拟实现一种实际开发的应用场景:从网络中不间断的周期取弹幕数据,这些弹幕数据往往是批量的,然后把这些从网络中取到的批量数据逐个的显示出来。...

空空如也

空空如也

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

b站弹幕api