B站弹幕分析,python爬b站弹幕

  B站弹幕分析,python爬b站弹幕

  继续。

  让我们开始分析弹幕信息:

  当我们与服务器握手完毕后,哔哩哔哩的弹幕服务器会继续向我们推送相关房间的弹幕消息。旧规则的前16个字节是这个包的相关信息。让我们看看这条消息的前16个字节说了什么。

  000 01 38前四个字节表示数据大小。这可以看作是312字节。

  010这两个字还是magic_number。这是16。

  000版本号0。

  000 00 05在上一篇文章中,我们介绍了07是进入房间的信息,其中05代表弹幕消息。

  000 00 00包类型正常消息包。

  然后是我们需要解析的数据。这里用了utf-8编码后传输,所以我们拿到后需要utf-8解码,然后在json中需要JSON解码。获得的数据如下

  {info: [

  [

  0,1,25,16777215,1508919436,1508918356,

  0, 58736ea5 ,

  0

  ],(_`),

  [2424710,,1,1,1,10000,1],

  [17,,姚,1320,16752445, ],

  [50,

  0,16746162,313],

  [标题-112-1 ,标题-112-1],

  0,

  0

  ], cmd :母丹消息 }

  这是弹幕消息,所以这里的cmd就是弹幕消息。除此之外,还有gift和welcome两个cmd消息,分别代表观众主的可靠西牛和专门弹幕消息广播欢迎已经开通vip的观众主。因为info里面有太多奇怪的信息,所以选择我们需要的重点,我们最关心的在info[1]里面。在wireshark数据界面的右侧,通常我们可以看到ascii的直接显示,但是如果我们发送中文数据,这里就不会显示了。我们需要获取返回的数据,并将其解码为utf-8格式,以便正确显示它们。请注意这里。

  实际上,当看十六进制数据时。根据规则,你可以用肉眼大致判断出数据是否经过utf-8处理。例如,让我们看看这个数据:

  按照我刚才说的,这里没有办法正确显示utf-8编码的数据。那么我们如何判断是utf-8数据还是他说的?

  我们来看看hex,从0080线上的e6开始。首先,e6在二进制中是1110 0110。在这里,我们假设它是utf-8,所以它是一个3字节的代码。我们需要继续查看接下来的两个字节。分别是88和91。二进制是1000 1000 1001 0001。没问题。它满足三个字节的条件。我们把它打印出来,看看是什么字。

  至此,我们知道如何愉快地获取弹幕数据了。

  所以其他数据其实也差不多。我们来看一个礼物数据。这里直接使用unicode,所以我们可以在wireshark中直接看到以\u开头的字符串:

  {cmd: send _ gift , data: {gift name :辣条, num: 4, uname :帅帅的空白, r cost: 2497905, uid: 10068441, top

  {uid: 10068441, uname :帅帅的空白, coin: 741500, face : 3358 I 2 . hdslb . com/bfs/face/60455d 5390 f 51615 D5 cf 36 a2 e 04 ABCD 96715

  {uid: 667222, uname :别说话, coin: 352800, face : 3358i0.hdslb.com/bfs/face/D5AFE8E69E419E347E825B6

  {uid: 253570, uname :肿奶黄包, coin: 233600, face : 3358 I 2 . HDS lb . com/bfs/face/3394 DFA 87 a 9d 15 b 7 b 06 C2 ef 8 f 41d 1 bad 6212 BD

  ],时间戳:1508919509, giftid: 1, gifttype: 0, action: feeding , super: 0, price: 100, rnd: 1508919309 , new medal: [], title : , beatId: 0, biz_source: live , metadata : , remain: 0, gold: 0, silver: 0, eventScore: 0, eventNum: 0, smalltv_msg: [], specialGift: null, notice _ in

  },多彩:{ 硬币:0,零钱:0,进度:{ 现在:0, max: 5000}

  }

  }, addFollow: 0

  }

  }

  这是一个欢迎老板的包裹:

  {cmd: welcome , data: {uid: 7651584, uname :零点村长的天真豌豆女连衣裙助她卡通狗的蛋喵, isadmin: 1, VIP: 1}, roomid: 989474}

  有了这些格式,你可以自定义弹幕机的功能。

  最后要提的是,这个链接有心跳保持机制。如果它基本不心跳,一分钟后就会自动坏掉。心跳包格式:

  000 00 10: 16字节的数据

  00 10:魔力数字

  001:版本号01

  000 00 02:心跳数据包类型

  000 00 01:数据交换包

  这个包的大小是70字节。如果批量抓取房间信息,很容易找到。每隔一段时间就会从本地ip地址发送到弹幕服务器。要验证这是不是真的心跳包,其实只需要找一个人少说话的房间,不会因为没人说话而有其他包。我们可以通过观察来确认。据我观察,每30秒就会有一个心跳包发射。在实现的时候,我们可以启动一个进程或者线程来发送心跳包。

  分析有问题的地方,欢迎指正。

  超过

  参考:

  https://baike.baidu.com/item/UTF-8/481798?Fr=阿拉丁UTF-8编码百度百科

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: