歌曲的歌词

一、py源码

import jsonimport execjs
import requests# 实例话一个node对象
node = execjs.get()
# js源文件编译
ctx = node.compile(open('网易云2号.js', encoding="utf-8").read())
# 执行js函数
func='getdata(25638340)'
data = ctx.eval(func)
params=data['encText']
encSecKey=data['encSecKey']
# print("params="+params,'encSecKey='+encSecKey)
p={
'params': params,
'encSecKey': encSecKey
}
url='https://music.163.com/weapi/song/lyric?csrf_token='
headers={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183'
}
page=requests.post(url=url,headers=headers,params=p).text
# print(page)
data_page=json.loads(page)
print(data_page['lrc']['lyric'])

二、js逆向代码

window = this;
const CryptoJS = require('./package')
function RSAKeyPair(a, b, c) {this.e = biFromHex(a),this.d = biFromHex(b),this.m = biFromHex(c),this.chunkSize = 2 * biHighIndex(this.m),this.radix = 16,this.barrett = new BarrettMu(this.m)
}
function encryptedString(a, b) {for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e;)c[e] = b.charCodeAt(e),e++;for (; 0 != c.length % a.chunkSize;)c[e++] = 0;for (f = c.length,g = "",e = 0; f > e; e += a.chunkSize) {for (j = new BigInt,h = 0,i = e; i < e + a.chunkSize; ++h)j.digits[h] = c[i++],j.digits[h] += c[i++] << 8;k = a.barrett.powMod(j, a.e),l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),g += l + " "}return g.substring(0, g.length - 1)
}function setMaxDigits(a) {maxDigits = a,ZERO_ARRAY = new Array(maxDigits);for (var b = 0; b < ZERO_ARRAY.length; b++)ZERO_ARRAY[b] = 0;bigZero = new BigInt,bigOne = new BigInt,bigOne.digits[0] = 1
}
function BigInt(a) {this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),this.isNeg = !1
}
function biFromDecimal(a) {for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c);)++c;if (c == a.length)d = new BigInt;else {for (e = a.length - c,f = e % dpl10,0 == f && (f = dpl10),d = biFromNumber(Number(a.substr(c, f))),c += f; c < a.length;)d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),c += dpl10;d.isNeg = b}return d
}
function biCopy(a) {var b = new BigInt(!0);return b.digits = a.digits.slice(0),b.isNeg = a.isNeg,b
}
function biFromNumber(a) {var c, b = new BigInt;for (b.isNeg = 0 > a,a = Math.abs(a),c = 0; a > 0;)b.digits[c++] = a & maxDigitVal,a >>= biRadixBits;return b
}
function reverseStr(a) {var c, b = "";for (c = a.length - 1; c > -1; --c)b += a.charAt(c);return b
}
function biToString(a, b) {var d, e, c = new BigInt;for (c.digits[0] = b,d = biDivideModulo(a, c),e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero);)d = biDivideModulo(d[0], c),digit = d[1].digits[0],e += hexatrigesimalToChar[d[1].digits[0]];return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {var c, d, b = new BigInt;for (b.digits[0] = 10,c = biDivideModulo(a, b),d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero);)c = biDivideModulo(c[0], b),d += String(c[1].digits[0]);return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {var b = 15, c = "";for (i = 0; 4 > i; ++i)c += hexToChar[a & b],a >>>= 4;return reverseStr(c)
}
function biToHex(a) {var d, b = "";for (biHighIndex(a),d = biHighIndex(a); d > -1; --d)b += digitToHex(a.digits[d]);return b
}
function charToHex(a) {var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {var d, b = 0, c = Math.min(a.length, 4);for (d = 0; c > d; ++d)b <<= 4,b |= charToHex(a.charCodeAt(d));return b
}
function biFromHex(a) {var d, e, b = new BigInt, c = a.length;for (d = c,e = 0; d > 0; d -= 4,++e)b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));return b
}
function biFromString(a, b) {var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt;for (f.digits[0] = 1,g = a.length - 1; g >= d; g--)h = a.charCodeAt(g),i = charToHex(h),j = biMultiplyDigit(f, i),e = biAdd(e, j),f = biMultiplyDigit(f, b);return e.isNeg = c,e
}
function biDump(a) {return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {var c, d, e, f;if (a.isNeg != b.isNeg)b.isNeg = !b.isNeg,c = biSubtract(a, b),b.isNeg = !b.isNeg;else {for (c = new BigInt,d = 0,f = 0; f < a.digits.length; ++f)e = a.digits[f] + b.digits[f] + d,c.digits[f] = 65535 & e,d = Number(e >= biRadix);c.isNeg = a.isNeg}return c
}
function biSubtract(a, b) {var c, d, e, f;if (a.isNeg != b.isNeg)b.isNeg = !b.isNeg,c = biAdd(a, b),b.isNeg = !b.isNeg;else {for (c = new BigInt,e = 0,f = 0; f < a.digits.length; ++f)d = a.digits[f] - b.digits[f] + e,c.digits[f] = 65535 & d,c.digits[f] < 0 && (c.digits[f] += biRadix),e = 0 - Number(0 > d);if (-1 == e) {for (e = 0,f = 0; f < a.digits.length; ++f)d = 0 - c.digits[f] + e,c.digits[f] = 65535 & d,c.digits[f] < 0 && (c.digits[f] += biRadix),e = 0 - Number(0 > d);c.isNeg = !a.isNeg} elsec.isNeg = a.isNeg}return c
}
function biHighIndex(a) {for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b];)--b;return b
}
function biNumBits(a) {var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit;for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)c <<= 1;return e
}
function biMultiply(a, b) {var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b);for (k = 0; f >= k; ++k) {for (d = 0,i = k,j = 0; e >= j; ++j,++i)h = c.digits[i] + a.digits[j] * b.digits[k] + d,c.digits[i] = h & maxDigitVal,d = h >>> biRadixBits;c.digits[k + e + 1] = d}return c.isNeg = a.isNeg != b.isNeg,c
}
function biMultiplyDigit(a, b) {var c, d, e, f;for (result = new BigInt,c = biHighIndex(a),d = 0,f = 0; c >= f; ++f)e = result.digits[f] + a.digits[f] * b + d,result.digits[f] = e & maxDigitVal,d = e >>> biRadixBits;return result.digits[1 + c] = d,result
}
function arrayCopy(a, b, c, d, e) {var g, h, f = Math.min(b + e, a.length);for (g = b,h = d; f > g; ++g,++h)c[h] = a[g]
}
function biShiftLeft(a, b) {var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c),e = b % bitsPerDigit,f = bitsPerDigit - e,g = d.digits.length - 1,h = g - 1; g > 0; --g,--h)d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;return d.digits[0] = d.digits[g] << e & maxDigitVal,d.isNeg = a.isNeg,d
}
function biShiftRight(a, b) {var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c),e = b % bitsPerDigit,f = bitsPerDigit - e,g = 0,h = g + 1; g < d.digits.length - 1; ++g,++h)d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;return d.digits[d.digits.length - 1] >>>= e,d.isNeg = a.isNeg,d
}
function biMultiplyByRadixPower(a, b) {var c = new BigInt;return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),c
}
function biDivideByRadixPower(a, b) {var c = new BigInt;return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),c
}
function biModuloByRadixPower(a, b) {var c = new BigInt;return arrayCopy(a.digits, 0, c.digits, 0, b),c
}
function biCompare(a, b) {if (a.isNeg != b.isNeg)return 1 - 2 * Number(a.isNeg);for (var c = a.digits.length - 1; c >= 0; --c)if (a.digits[c] != b.digits[c])return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);return 0
}
function biDivideModulo(a, b) {var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;if (d > c)return a.isNeg ? (f = biCopy(bigOne),f.isNeg = !b.isNeg,a.isNeg = !1,b.isNeg = !1,g = biSubtract(b, a),a.isNeg = !0,b.isNeg = e) : (f = new BigInt,g = biCopy(a)),new Array(f, g);for (f = new BigInt,g = a,h = Math.ceil(d / bitsPerDigit) - 1,i = 0; b.digits[h] < biHalfRadix;)b = biShiftLeft(b, 1),++i,++d,h = Math.ceil(d / bitsPerDigit) - 1;for (g = biShiftLeft(g, i),c += i,j = Math.ceil(c / bitsPerDigit) - 1,k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k);)++f.digits[j - h],g = biSubtract(g, k);for (l = j; l > h; --l) {for (m = l >= g.digits.length ? 0 : g.digits[l],n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1],o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2],p = h >= b.digits.length ? 0 : b.digits[h],q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1],f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p),r = f.digits[l - h - 1] * (p * biRadix + q),s = m * biRadixSquared + (n * biRadix + o); r > s;)--f.digits[l - h - 1],r = f.digits[l - h - 1] * (p * biRadix | q),s = m * biRadix * biRadix + (n * biRadix + o);k = biMultiplyByRadixPower(b, l - h - 1),g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),g.isNeg && (g = biAdd(g, k),--f.digits[l - h - 1])}return g = biShiftRight(g, i),f.isNeg = a.isNeg != e,a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),b = biShiftRight(b, i),g = biSubtract(b, g)),0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),new Array(f, g)
}
function biDivide(a, b) {return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {for (var c = bigOne, d = a; ;) {if (0 != (1 & b) && (c = biMultiply(c, d)),b >>= 1,0 == b)break;d = biMultiply(d, d)}return c
}
function biPowMod(a, b, c) {for (var d = bigOne, e = a, f = b; ;) {if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),f = biShiftRight(f, 1),0 == f.digits[0] && 0 == biHighIndex(f))break;e = biMultiplyMod(e, e, c)}return d
}
function BarrettMu(a) {this.modulus = biCopy(a),this.k = biHighIndex(this.modulus) + 1;var b = new BigInt;b.digits[2 * this.k] = 1,this.mu = biDivide(b, this.modulus),this.bkplus1 = new BigInt,this.bkplus1.digits[this.k + 1] = 1,this.modulo = BarrettMu_modulo,this.multiplyMod = BarrettMu_multiplyMod,this.powMod = BarrettMu_powMod
}
function BarrettMu_modulo(a) {var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g);for (h.isNeg && (h = biAdd(h, this.bkplus1)),i = biCompare(h, this.modulus) >= 0; i;)h = biSubtract(h, this.modulus),i = biCompare(h, this.modulus) >= 0;return h
}
function BarrettMu_multiplyMod(a, b) {var c = biMultiply(a, b);return this.modulo(c)
}
function BarrettMu_powMod(a, b) {var d, e, c = new BigInt;for (c.digits[0] = 1,d = a,e = b; ;) {if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),e = biShiftRight(e, 1),0 == e.digits[0] && 0 == biHighIndex(e))break;d = this.multiplyMod(d, d)}return c
}
var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),dpl10 = 15,lr10 = biFromNumber(1e15),hexatrigesimalToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"),hexToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"),highBitMasks = new Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535),lowBitMasks = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535);
function a(a) {var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";for (d = 0; a > d; d += 1)e = Math.random() * b.length,e = Math.floor(e),c += b.charAt(e);return c
}
function b(a, b) {var c = CryptoJS.enc.Utf8.parse(b), d = CryptoJS.enc.Utf8.parse("0102030405060708"), e = CryptoJS.enc.Utf8.parse(a), f = CryptoJS.AES.encrypt(e, c, {iv: d,mode: CryptoJS.mode.CBC});return f.toString()
}
function c(a, b, c) {var d, e;return setMaxDigits(131),d = new RSAKeyPair(b, "", c),e = encryptedString(d, a)
}
function d(d, e, f, g) {var h = {}, i = a(16);return h.encText = b(d, g),h.encText = b(h.encText, i),h.encSecKey = c(i, e, f),h
}
function e(a, b, d, e) {var f = {};return f.encText = c(a + e, b, d),f
}window.asrsea = d,window.ecnonasr = e
function getdata(id) {var data = window.asrsea(JSON.stringify({ "id": id, "lv": -1, "tv": -1, "csrf_token": "" }), '010001', '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7', '0CoJUm6Qyw8W8jud');return data}
getdata(25638340)

基于网易云音乐的歌词js逆向相关推荐

  1. 网易云音乐的歌词无法在桌面歌词显示

    现象:Win10,已正确加载歌词,在软件内可以看到歌词,在桌面歌词框内无法显示,歌词是英文的 原因:默认的歌词字体"微软雅黑"不支持英文 解决:在网易云音乐中 设置->歌词- ...

  2. 基于网易云音乐API的微信小程序——网愈芸音乐

    网愈芸音乐 一.项目说明 二.项目环境准备 三.项目初始化 1.新建项目 2.安装依赖Vant Weapp,构建NPM 四.项目具体开发过程 1.欢迎页面(首页): 2.登陆页面 1.界面设计 2.逻 ...

  3. Python-Selenium爬虫之网易云音乐歌曲歌词爬取并保存到本地(详解分析+代码实现)

    文章目录 一.项目介绍 二.所需技术 三.网页分析 3.1 分析一级页面响应内容 3.2 分析二级页面响应内容 3.3 分析三级页面响应内容 3.4 分析四级页面响应内容 四.分析小结 五.代码实现 ...

  4. 网站开发:爬取一拨网易云音乐的歌词

    啦啦啦,之前一直在做个音乐网站,然后涉及到了歌词,可当时自己不懂歌词的爬取链接,所以一直采用的手录歌词的方法,费时又费力.前两天在一篇CSDN文章上发现了网易云的歌词链接.然后就立马利用起来爬取一拨歌 ...

  5. python爬取网易云音乐薛之谦歌词数据,生成词云

    老薛最近频频上热搜,因为老薛的歌大部分是自己作词,所以感觉他的歌词和他应该有某种情感表达和联系吧. 于是用python爬了网易云音乐中老薛的歌词数据,并简单用wordcloud写了个词云统计. 难过, ...

  6. PC 网易云音乐桌面歌词原版天际蓝配色方案

    这是网易云音乐在某个版本更新前的天际蓝配色,觉得比现有的预设方案好看所以给记下来了 当前版本中多了个描边,测试发现用默认的灰色就行了. 以下是颜色参数: 类别 渐变上 渐变下 描边 已播放 26,24 ...

  7. 基于网易云音乐API的微信小程序——zwhdlb的音乐平台

    1项目说明 最近在学习小程序的开发的过程中,临时想写一个音乐小程序,看到了网易云 提供了后台api程序,这方便我们直接进行音乐小程序的开发不用再从后端开始开发,网易云音乐平时也经常在用,因此想记录一下 ...

  8. 【小练习】使用selenium根据 歌单 多线程爬取网易云音乐的歌词

    准备工作 首先找到url,分析页面: 通过分析发现直接用find_element_by_XXX的方法是提取不到内容的,首先要转换到iframe这个页面中,代码如下: import time from ...

  9. 【前端 H5】模仿网易云音乐 CSS 加js 实现留声机效果 H5

    效果实现还是很基础的 主要是动画 简单的动画使用了css的transition 过渡 加 hover实践实现 盘转动的 使用了js 因考虑到停止时暂不能解决停留在原处 故使用的 setInterval ...

  10. 爬取网易云音乐某个歌手的全部歌曲的歌词

    网易云音乐的网页大多都是js加载出来,我们无法直接通过解析网页来获取歌词,本文讲解如何通过网易提供的API和相应的爬虫技术下载某个歌手全部歌曲的歌词. 网易云音乐的歌词是通过js加载的,无法通过页面直 ...

最新文章

  1. project 模板_18个施工进度计划横道图模板,自动出图超方便,全部在这儿给你准好了...
  2. 求链表倒数第k个结点
  3. 原始尺寸_螺母尺寸检测,螺丝螺母外观检测设备
  4. android手机生成pdf格式文件,Android根据pdf模板生成pdf文件
  5. 数据开放平台的配置管理
  6. Oracle11g数据库监听配置
  7. 基于Keras的卷积神经网络(CNN)可视化
  8. 获取自己主机外网ip
  9. Python-进程与线程理论基础-Day10
  10. 中文分词库jieba介绍
  11. Cocos Creator大厅+子游戏模式
  12. 奥拉星插件flash下载手机版下载安装_flash控件手机版
  13. 单片机通过串口与电脑通信
  14. AMP Roadshow技术分享路演中国专场报名
  15. origin画图对图片进行缩放时,如何不让文字一同缩放?
  16. 联想拯救者wif开不了_联想拯救者 + ubuntu16.04 + WIFI设置
  17. React入门第一个程序及使用JS和JSX的区别
  18. .net core 下的 Strings.StrConv 繁简转换
  19. 硬件、网卡驱动官方下载地址
  20. Mysql性能优化及主从同步-mysql-xing-neng-you-hua-ji-zhu-cong-tong-bu

热门文章

  1. XLM跨语言模型-论文笔记
  2. .net微信授权登录整理
  3. 前端高级工程师最全面试题-持续更新
  4. linux dup dup2刍议
  5. 全国知名的私募基金-全国office组网MPLS
  6. npm进阶(一) 更换成淘宝镜像源以及 cnpm
  7. 浅谈数字化工厂五大核心系统
  8. 冠达管理:市盈率除以市净率是什么意思?
  9. 关于Mac远程ssh免密链接Centos的方法
  10. Java面试2018常考题目汇总(一)