【虎牙直播源】浏览器抓取真实直播源地址(纯前端JS解析源码) 您所在的位置:网站首页 怎样获取直播地址 【虎牙直播源】浏览器抓取真实直播源地址(纯前端JS解析源码)

【虎牙直播源】浏览器抓取真实直播源地址(纯前端JS解析源码)

2023-05-01 21:24| 来源: 网络整理| 查看: 265

浏览器抓取真实直播源地址(纯前端JS解析) 0. 前言1. 浏览器抓取流程2. 参数解析3. 源码及播放器实现4. 总结

网上搜索各种平台的直播源地址都是满天飞,但是经常会有失效的时候,因为官方也会定期的升级系统修改各种参数或链接让直播源不能永久,所以敝人一直崇尚的是 授人以鱼不如授人以渔,与其给直播源别人,不如教大家如何去爬取直播源,就算失效了也不怕。 在这里插入图片描述

0. 前言

本人业余时间喜欢用虎牙看直播,所以第一个便是想到如何抓取虎牙的直播源。 在抓取之前,需要了解视频直播源的分类和区别,可以自行了解hls,flv,m3u8等知识。

Tips: 本教程只是教大家如何利用前端调试技巧和爬虫基本操作,不作为商业用途,各位童鞋耗子尾汁。

1. 浏览器抓取流程

首选打开虎牙官网,随便找个直播间:https://m.huya.com/949527,这里是使用的手机端的网页(因为手机端的简单) 随便看了下,没有ajax请求,那么地址定是随页面带进来了,现在大部分直播网页都是SSR(服务器端渲染),所以只能去页面源代码找找: 好家伙!直接就找到了一个很想地址的东西 liveLineUrl,是一个m3u8的地址: 在这里插入图片描述

在线m3u8播放测试网站:https://www.m3u8play.com/

这个网站可以测试播放源是不是好的,来!试一下! 在这里插入图片描述 就很完美! 在这里插入图片描述 但是就这么简单的吗? 在这里插入图片描述 我又试了一下我经常看的【一起看】的直播间,来看看电影啥的,结果: 在这里插入图片描述 在这里插入图片描述 这是咋回事。。。然后对比下前后两个链接发现了问题,下面是【一起看】的链接: 在这里插入图片描述 然后想到 liveLineUrl 这个参数不是全局变量吗,控制台打印看一下,再仔细对比发现参数变了有个fm参数已经变成了seqid: 在这里插入图片描述 先试下控制台打印的能不能播放: 在这里插入图片描述 行,司马懿出来了,现在只用分析如何破解参数即可。

2. 参数解析

Ctrl + Shift + F 搜索 liveLineUrl , 然后找到这里处理url的js,打个断点调试一下,看看怎么处理的: 在这里插入图片描述 断点进入 Object(m.default)(window.liveLineUrl) 可以看到这里就是处理参数的地方,最后返回的就是解析后的参数字符串: 在这里插入图片描述 我整理了下解析函数,重新实现了一下:

function parseUrl(url){ let params = url.split("?")[1]; params = params.split("&"); let paramsObj = {}; for (let i = 0; i { y += `&${e}=${others[e]}` }); return `${mainUrl}?wsSecret=${newWsSecret}&wsTime=${wsTime}&u=0&seqid=${time}${y}`; }

其中用到了Base64和MD5相关函数:

// md5下载:https://raw.githubusercontent.com/emn178/js-md5/master/src/md5.js let Base64 = { _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function(e) { var t = ""; var n, r, i, s, o, u, a; var f = 0; e = Base64._utf8_encode(e); while (f > 2; o = (n & 3) 4; u = (r & 15) 6; a = i & 63; if (isNaN(r)) { u = a = 64 } else if (isNaN(i)) { a = 64 } t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a) } return t }, decode: function(e) { var t = ""; var n, r, i; var s, o, u, a; var f = 0; e = e.replace(/[^A-Za-z0-9+/=]/g, ""); while (f > 6 & 63 | 128); t += String.fromCharCode(r & 63 | 128) } } return t }, _utf8_decode: function(e) { var t = ""; var n = 0; var r = c1 = c2 = 0; while (n 虎牙直播 To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video let Base64 = { _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function(e) { var t = ""; var n, r, i, s, o, u, a; var f = 0; e = Base64._utf8_encode(e); while (f > 2; o = (n & 3) 4; u = (r & 15) 6; a = i & 63; if (isNaN(r)) { u = a = 64 } else if (isNaN(i)) { a = 64 } t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a) } return t }, decode: function(e) { var t = ""; var n, r, i; var s, o, u, a; var f = 0; e = e.replace(/[^A-Za-z0-9+/=]/g, ""); while (f > 6 & 63 | 128); t += String.fromCharCode(r & 63 | 128) } } return t }, _utf8_decode: function(e) { var t = ""; var n = 0; var r = c1 = c2 = 0; while (n


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有