音乐小爬2


遇事不决,勾栏听曲

搜索,同样为get请求,但返回无意义

image.png

在网络中查找,发现搜索接口,查看数据发现无可用信息

image.png

进入具体音乐页面,发现请求接口,响应里有链接

image.png

image.png

查看音乐请求,对比发现不同处为encode_album_audio_id猜测为音乐标识id
GET /yy/index.php?r=play/getdata&callback=jQuery19105511680469461328_1675129023355&dfid=08xrxO05ksAE43juSd28o92H&appid=1014&mid=f952480a8705aa8efb36735fe792bece&platid=4&

"encode_album_audio_id=46r8v7e0"

&_=1675129023356 HTTP/2
Host: wwwapiretry.kugou.com
Cookie: kg_mid=f952480a8705aa8efb36735fe792bece; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1675127580; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1675129024; kg_dfid=08xrxO05ksAE43juSd28o92H; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; kg_mid_temp=f952480a8705aa8efb36735fe792bece
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://www.kugou.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-site
Sec-Ch-Ua-Platform: "Windows"
Sec-Ch-Ua: "Google Chrome";v="108", "Chromium";v="108", "Not=A?Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Te: trailers
在音乐搜索响应中搜索该id值,发现确实为标识id

image.png

对比请求包,发现3处不同
GET /v2/search/song?

"callback=callback345"

&srcappid=2919&clientver=1000&

"clienttime=1675127601776"

&mid=f952480a8705aa8efb36735fe792bece&uuid=f952480a8705aa8efb36735fe792bece&dfid=08xrxO05ksAE43juSd28o92H&keyword=a&page=1&pagesize=30&bitrate=0&isfuzzy=0&inputtype=0&platform=We
bFilter&userid=0&iscorrection=1&privilege_filter=0&filter=10&token=&appid=1014&

"signature=7fce4fe8f8683dbc7046e8f427661ffd" 

HTTP/2
Host: complexsearchretry.kugou.com
Cookie: kg_mid=f952480a8705aa8efb36735fe792bece; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1675127580; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1675127580; kg_dfid=08xrxO05ksAE43juSd28o92H; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: https://www.kugou.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-site
Sec-Ch-Ua-Platform: "Windows"
Sec-Ch-Ua: "Google Chrome";v="108", "Chromium";v="108", "Not=A?Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Te: trailers
搜索clienttime,发现为n

image.png

向上查找,n为自 1970/01/01 以来的毫秒数

image.png

搜索signature,打上断点

image.png)

s值

image.png

打印l.signature,确实为signature值

image.png

查找后,发现为md5加密
"undefined" == typeof faultylabs && (faultylabs = {}),
faultylabs.MD5 = function(a) {
    function b(a) {
        var b = (a >>> 0).toString(16);
        return "00000000".substr(0, 8 - b.length) + b
    }
    function c(a) {
        for (var b = [], c = 0; c < a.length; c++)
            b = b.concat(k(a[c]));
        return b
    }
    function d(a) {
        for (var b = [], c = 0; 8 > c; c++)
            b.push(255 & a),
            a >>>= 8;
        return b
    }
    function e(a, b) {
        return a << b & 4294967295 | a >>> 32 - b
    }
    function f(a, b, c) {
        return a & b | ~a & c
    }
    function g(a, b, c) {
        return c & a | ~c & b
    }
    function h(a, b, c) {
        return a ^ b ^ c
    }
    function i(a, b, c) {
        return b ^ (a | ~c)
    }
    function j(a, b) {
        return a[b + 3] << 24 | a[b + 2] << 16 | a[b + 1] << 8 | a[b]
    }
    function k(a) {
        for (var b = [], c = 0; c < a.length; c++)
            if (a.charCodeAt(c) <= 127)
                b.push(a.charCodeAt(c));
            else
                for (var d = encodeURIComponent(a.charAt(c)).substr(1).split("%"), e = 0; e < d.length; e++)
                    b.push(parseInt(d[e], 16));
        return b
    }
    function l() {
        for (var a = "", c = 0, d = 0, e = 3; e >= 0; e--)
            d = arguments[e],
            c = 255 & d,
            d >>>= 8,
            c <<= 8,
            c |= 255 & d,
            d >>>= 8,
            c <<= 8,
            c |= 255 & d,
            d >>>= 8,
            c <<= 8,
            c |= d,
            a += b(c);
        return a
    }
    function m(a) {
        for (var b = new Array(a.length), c = 0; c < a.length; c++)
            b[c] = a[c];
        return b
    }
    function n(a, b) {
        return 4294967295 & a + b
    }
    function o() {
        function a(a, b, c, d) {
            var f = v;
            v = u,
            u = t,
            t = n(t, e(n(s, n(a, n(b, c))), d)),
            s = f
        }
        var b = p.length;
        p.push(128);
        var c = p.length % 64;
        if (c > 56) {
            for (var k = 0; 64 - c > k; k++)
                p.push(0);
            c = p.length % 64
        }
        for (k = 0; 56 - c > k; k++)
            p.push(0);
        p = p.concat(d(8 * b));
        var m = 1732584193
          , o = 4023233417
          , q = 2562383102
          , r = 271733878
          , s = 0
          , t = 0
          , u = 0
          , v = 0;
        for (k = 0; k < p.length / 64; k++) {
            s = m,
            t = o,
            u = q,
            v = r;
            var w = 64 * k;
            a(f(t, u, v), 3614090360, j(p, w), 7),
            a(f(t, u, v), 3905402710, j(p, w + 4), 12),
            a(f(t, u, v), 606105819, j(p, w + 8), 17),
            a(f(t, u, v), 3250441966, j(p, w + 12), 22),
            a(f(t, u, v), 4118548399, j(p, w + 16), 7),
            a(f(t, u, v), 1200080426, j(p, w + 20), 12),
            a(f(t, u, v), 2821735955, j(p, w + 24), 17),
            a(f(t, u, v), 4249261313, j(p, w + 28), 22),
            a(f(t, u, v), 1770035416, j(p, w + 32), 7),
            a(f(t, u, v), 2336552879, j(p, w + 36), 12),
            a(f(t, u, v), 4294925233, j(p, w + 40), 17),
            a(f(t, u, v), 2304563134, j(p, w + 44), 22),
            a(f(t, u, v), 1804603682, j(p, w + 48), 7),
            a(f(t, u, v), 4254626195, j(p, w + 52), 12),
            a(f(t, u, v), 2792965006, j(p, w + 56), 17),
            a(f(t, u, v), 1236535329, j(p, w + 60), 22),
            a(g(t, u, v), 4129170786, j(p, w + 4), 5),
            a(g(t, u, v), 3225465664, j(p, w + 24), 9),
            a(g(t, u, v), 643717713, j(p, w + 44), 14),
            a(g(t, u, v), 3921069994, j(p, w), 20),
            a(g(t, u, v), 3593408605, j(p, w + 20), 5),
            a(g(t, u, v), 38016083, j(p, w + 40), 9),
            a(g(t, u, v), 3634488961, j(p, w + 60), 14),
            a(g(t, u, v), 3889429448, j(p, w + 16), 20),
            a(g(t, u, v), 568446438, j(p, w + 36), 5),
            a(g(t, u, v), 3275163606, j(p, w + 56), 9),
            a(g(t, u, v), 4107603335, j(p, w + 12), 14),
            a(g(t, u, v), 1163531501, j(p, w + 32), 20),
            a(g(t, u, v), 2850285829, j(p, w + 52), 5),
            a(g(t, u, v), 4243563512, j(p, w + 8), 9),
            a(g(t, u, v), 1735328473, j(p, w + 28), 14),
            a(g(t, u, v), 2368359562, j(p, w + 48), 20),
            a(h(t, u, v), 4294588738, j(p, w + 20), 4),
            a(h(t, u, v), 2272392833, j(p, w + 32), 11),
            a(h(t, u, v), 1839030562, j(p, w + 44), 16),
            a(h(t, u, v), 4259657740, j(p, w + 56), 23),
            a(h(t, u, v), 2763975236, j(p, w + 4), 4),
            a(h(t, u, v), 1272893353, j(p, w + 16), 11),
            a(h(t, u, v), 4139469664, j(p, w + 28), 16),
            a(h(t, u, v), 3200236656, j(p, w + 40), 23),
            a(h(t, u, v), 681279174, j(p, w + 52), 4),
            a(h(t, u, v), 3936430074, j(p, w), 11),
            a(h(t, u, v), 3572445317, j(p, w + 12), 16),
            a(h(t, u, v), 76029189, j(p, w + 24), 23),
            a(h(t, u, v), 3654602809, j(p, w + 36), 4),
            a(h(t, u, v), 3873151461, j(p, w + 48), 11),
            a(h(t, u, v), 530742520, j(p, w + 60), 16),
            a(h(t, u, v), 3299628645, j(p, w + 8), 23),
            a(i(t, u, v), 4096336452, j(p, w), 6),
            a(i(t, u, v), 1126891415, j(p, w + 28), 10),
            a(i(t, u, v), 2878612391, j(p, w + 56), 15),
            a(i(t, u, v), 4237533241, j(p, w + 20), 21),
            a(i(t, u, v), 1700485571, j(p, w + 48), 6),
            a(i(t, u, v), 2399980690, j(p, w + 12), 10),
            a(i(t, u, v), 4293915773, j(p, w + 40), 15),
            a(i(t, u, v), 2240044497, j(p, w + 4), 21),
            a(i(t, u, v), 1873313359, j(p, w + 32), 6),
            a(i(t, u, v), 4264355552, j(p, w + 60), 10),
            a(i(t, u, v), 2734768916, j(p, w + 24), 15),
            a(i(t, u, v), 1309151649, j(p, w + 52), 21),
            a(i(t, u, v), 4149444226, j(p, w + 16), 6),
            a(i(t, u, v), 3174756917, j(p, w + 44), 10),
            a(i(t, u, v), 718787259, j(p, w + 8), 15),
            a(i(t, u, v), 3951481745, j(p, w + 36), 21),
            m = n(m, s),
            o = n(o, t),
            q = n(q, u),
            r = n(r, v)
        }
        return l(r, q, o, m).toUpperCase()
    }
    var p = null
      , q = null;
    return "string" == typeof a ? p = k(a) : a.constructor == Array ? 0 === a.length ? p = a : "string" == typeof a[0] ? p = c(a) : "number" == typeof a[0] ? p = a : q = typeof a[0] : "undefined" != typeof ArrayBuffer ? a instanceof ArrayBuffer ? p = m(new Uint8Array(a)) : a instanceof Uint8Array || a instanceof Int8Array ? p = m(a) : a instanceof Uint32Array || a instanceof Int32Array || a instanceof Uint16Array || a instanceof Int16Array || a instanceof Float32Array || a instanceof Float64Array ? p = m(new Uint8Array(a.buffer)) : q = typeof a : q = typeof a,
    q && alert("MD5 type mismatch, cannot process " + q),
    o()
}
拆分解决
需安装hashlib模块

模块作用:进行md5编码
pip install hashlib
python3 -m install hashlib

s值的数据

image.png

明显为列表

image.png

进行转化与MD5加密

image.png

构建请求数据

image.png

对id进行初步爬取

image.png

构建获取音乐请求数据

image.png

爬取音乐链接

image.png

初步代码,效果为获取搜索第一个数据的url
import requests
import hashlib
import time
import re

header = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
    }
prox = {
        "http":"61.216.156.222:60808"
    }
n=input("请输入歌手和歌名")
s = [
    "NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt", 
    "appid=1014", 
    "bitrate=0", 
    "callback=callback123", 
    "clienttime={}".format(int(time.time() * 1000)), 
    "clientver=1000", 
    "dfid=08xrxO05ksAE43juSd28o92H", 
    "filter=10", 
    "inputtype=0", 
    "iscorrection=1", 
    "isfuzzy=0", 
    "keyword={}".format(n), 
    "mid=f952480a8705aa8efb36735fe792bece", 
    "page=1", 
    "pagesize=30", 
    "platform=WebFilter", 
    "privilege_filter=0", 
    "srcappid=2919", 
    "token=", 
    "userid=0", 
    "uuid=f952480a8705aa8efb36735fe792bece", 
    "NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt"
]
o="".join(s) 
md5 = hashlib.md5(o.encode(encoding="utf-8")).hexdigest() #md5加密
param={
    "callback":"callback123",
    "srcappid":"2919",
    "clientver":"1000",
    "clienttime":int(time.time() * 1000),
    "mid":"f952480a8705aa8efb36735fe792bece",
    "uuid":"f952480a8705aa8efb36735fe792bece",
    "dfid":"08xrxO05ksAE43juSd28o92H",
    "keyword": f"{n}",
    "page":"1",
    "pagesize":"30",
    "bitrate":"0",
    "isfuzzy":"0",
    "inputtype":"0",
    "platform":"WebFilter",
    "userid":"0",
    "iscorrection":"1",
    "privilege_filter":"0",
    "filter":"10",
    "token":"",
    "appid":"1014",
    "signature": md5
}
data=requests.get('https://complexsearch.kugou.com/v2/search/song',headers=header,proxies=prox,params=param)
kugous=re.compile('"EMixSongID":"(.+?)".',re.S)
kugouid=re.findall(kugous,data.text)

params={
    'r':'play/getdata',
    'callback':'jQuery19105511680469461328_1675129023355',
    'dfid':'08xrxO05ksAE43juSd28o92H',
    'appid':'1014',
    'mid':'f952480a8705aa8efb36735fe792bece',
    'platid':'4',
    "encode_album_audio_id":kugouid[0],
    '_':'1675129023356'
}
kugoudata=requests.get('https://wwwapiretry.kugou.com/yy/index.php?',headers=header,proxies=prox,params=params)
kugoud=re.compile('"play_url":"(.+?)"',re.S) #还有一个备份地址,正则为 "play_backup_url":"(.+?)"
kugoudm=re.findall(kugoud,kugoudata.text)
kugoum = eval(repr(str(kugoudm)).replace('\\', ''))
print(kugoum)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值