Python爬取斗鱼弹幕——多房间同时抓取实现(一)

Python爬取斗鱼弹幕——多房间同时抓取实现(一)从单个房间开始

技能储备需求
我们从零基础出发,但前提是假设我们已经有了基本python语法基础(比如我已经会了 Hello World!)现在需要学的:

  • 套接字socket
  • 正则表达式
  • 多线程爬虫
  • requests库的使用
  • json库的使用

以上五个是我们接下来会用到的,我们只要知道基本用法,如果只是单纯想实现爬弹幕功能,不需要深究。
斗鱼弹幕服务器第三方接入通讯协议

  • 此文档对斗鱼平台弹幕和相关消息通讯协议格式进行了详细说明,同时附带获取弹幕的详细操作步骤,意为第三方平台获取斗鱼弹幕等信息提供帮助。
  • 在谷歌上或者登陆官方论坛(http://dev-bbs.douyutv.com/forum.php) 都可以下载此文档

步入正题
Step1 建立与服务器连接
斗鱼弹幕通讯协议是一种基于 TCP 服务的应用层协议。我们可以从上文所提及文档中连接初始化的步骤。第三方客户端通过 TCP 协议连接到弹幕服务器(依据指定的 IP 和端口)。
第三方接入弹幕服务器列表:
IP 地址:openbarrage.douyutv.com 端口:8601
我们使用socket库来建立连接。
步骤很简单:

  1. 初始化socket
  2. 利用socket库中的connect方法建立连接

说明:connect方法需要的参数host我们可以通过IP地址来获取。
以下是代码

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # create a socket
host = socket.gethostbyname("openbarrage.douyutv.com")  # get the host(8601) of Douyu
port = 8601
s.connect((host, port))  # connect the socket to Douyu

连接成功之后,我们可以用socket库中的recv方法获取服务器返回消息。但是到这一步,我们还不能收到弹幕消息。(房间还没进呢)
step2 登录及进入弹幕分组
根据斗鱼弹幕服务器协议要求,第三方接入需要先向服务器发送登录请求,并加入分组,服务器才会将客户端添加到请求指定弹幕分组,并返回相关消息。
这也很好理解,我们得先告诉对方我们想要获取什么,对方才好返回消息。
步骤

  1. 登录
    客户端向弹幕服务器发送登录请求,登录弹幕服务器;弹幕服务器收到客户端登录请求并完成登录后,返回登录成功消息给客户端。
    在此之前,我们需要知道斗鱼对于第三方发送的消息格式有自己的一套协议,所以,我们发送的登录请求必须符合这一规定。
    斗鱼后台协议头设计如下:
    在这里插入图片描述
    字段说明如下:
    消息长度:4 字节小端整数,表示整条消息(包括自身)长度(字节数)。
    消息长度出现两遍,二者相同。
    消息类型:2 字节小端整数,表示消息类型。取值如下:
    689 客户端发送给弹幕服务器的文本格式数据
    690 弹幕服务器发送给客户端的文本格式数据。
    加密字段:暂时未用,默认为 0。
    保留字段:暂时未用,默认为 0。
    数据部分:斗鱼独创序列化文本数据,结尾必须为‘\0’。详细序列化、反
    序列化算法见下节。(所有协议内容均为 UTF-8 编码)
    简述
    简而言之,上述协议是规定了一套协议头的格式,就是说,我们想要发送给服务器的任何消息之前都需要加上上面的协议头。所以我们接下来的工作就是要写好这一段协议头。
    以下是代码:
data_length =
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值