java svgbase64转byte_我用Java爬取了斗鱼刀塔区的弹幕

904d4431bac29b658569c1113527bc1c.png

在前面的文章中已经把前后端的框架搭好,本篇文章我们来写一下斗鱼弹幕爬虫的Java版。可能有人会说Python版本的爬虫到处都可以搜到,而且用Python的scrapy、beautifulsoup等库又快又方便,那么为什么我们还要用Java写爬虫呢?

事实是这样没错,但是这次的弹幕爬虫严格来讲主要涉及到网络数据传输,并不需要构造html标签,直接用socket + mybatis请求到数据后存入数据库即可(我会说是python的多线程不熟悉吗),其实也很方便,也不用去加脚本加py文件来实现。总而言之就两个字,简单。

下载斗鱼协议文档

斗鱼弹幕爬虫原理很简单:

  • 客户端依次发送,登陆请求、加入房间请求、加入弹幕组请求。
  • 斗鱼的服务端返回弹幕

当然由于是一个长链接,还需要另起一个心跳线程(heart thread)来不断发送alive消息,以保持连接。

Step1 下载协议文档

去斗鱼第三方开放平台下载两份文档:

  • 《斗鱼第三方开放平台API文档v2.2》
  • 《斗鱼弹幕服务器第三方接入协议v1.6.2》

Step2 了解协议

根据第三方接入协议所述,我们需要按照斗鱼消息协议格式向斗鱼的弹幕服务器发送请求。

发送消息

就像TCP的3次握手一样,首先由客户端发出第一次握手,我们需要先发出登陆请求,为了扩展,我们将所有请求都认为是msg,先写一个请求函数。

public static void sendRequest(Socket client, String msg){
    
    try {
    
        int msgLength = 4 + 4 + msg.length() + 1;
        byte[] dataLength = intToBytes(msgLength);
        byte[] dataHead = intToBytes(DyUtil.CODE); // CODE = 689
        byte[] data = msg.getBytes(StandardCharsets.ISO_8859_1); // 指定String转byte的编码格式

        ByteArrayOutputStream byteArray = new ByteArrayOutputStream();

        byteArray.write(dataLength);
        byteArray.write(dataLength);
        byteArray.write(dataHead);
        byteArray.write(data);
        byteArray.write(0);

        OutputStream out = client.getOutputStream();
        out.write(byteArray.toByteArray());
        out.flush();
    } catch (IOException e) {
    
        e.printStackTrace();
    }
}

我们定义一个发送请求的函数,这里的client

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值