成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Python爬取酷狗MP3音頻的步驟

瀏覽:7日期:2022-06-27 08:35:22
分析問題音頻url

點入某個音樂的播放界面,通過F12-Network,分析數據,可以看到有一個index.php?..返回數據中有一個play_url,打開后正是我們需要的音頻。

查看該url的headers,其params參數如下,通過反復不同的幾次嘗試,得知r、callback、dfid、mid、platid這幾項不變,而通過初步的requests嘗試,發現最后一項’_’可有可無,改變的只有hash和album_id兩項。

r: play/getdatacallback: jQuery1910861615852090795_1612578519454hash: EF0DA656831F08B1FD2CB855BC38ED2Cdfid: 0Q0Clh1IcZaG3ey1J70RaTiLmid: b6cf66837b18642cc269390b066649dcplatid: 4album_id: 41669581_: 1612578519455搜索url

得知改變的只有兩項后,那就容易多了,在搜索歌曲界面Network,發現song?...該url返回值中有hash和album_id存在,我們之后只用搜索結果第一項(一般要搜的歌曲排名第一)。

同樣分析其params參數,改變的只有keyword、signature、clienttime、mid、uuid。后三者可以比較容易看出其為毫秒級時間戳(13位),keyword也挺容易明白,signature哪里找呢?通過全局搜索signature,發現有一個js文件中含有該關鍵詞。

callback: callback123keyword: 花海page: 1pagesize: 30bitrate: 0isfuzzy: 0tag: eminputtype: 0platform: WebFilteruserid: -1clientver: 2000iscorrection: 1privilege_filter: 0srcappid: 2919clienttime: 1612579100435mid: 1612579100435uuid: 1612579100435dfid: -signature: 472F60133C23184CAFC5005350C90229JS

找到的js代碼如下

'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()},function() { function a(a) { if (window.KgMobileCall) a && a(); else { var b = document.createElement('script'); b.src = 'https://m3ws.kugou.com/static/js/common/mobilecall_3.0.js', b.onload = function() { this.readyState && 'loaded' != this.readyState && 'complete' != this.readyState || a && a() } , document.body.appendChild(b) } } function b(b, c, d) { b = b || {}, c = c || '', d = d || {}; var e, f = !1, g = 'json'; 'function' == typeof d ? e = d : (e = d.callback, f = d.useH5 || !1, g = d.postType || 'json'); var h = {}; for (var i in b) !h[i] && (h[i] = b[i]); var j = function() { var a = navigator.userAgent.match(/KGBrowser/gi) ? !0 : !1 , b = navigator.userAgent.match(/kugouandroid/gi) ? !0 : !1 , c = 'undefined' == typeof external ? !1 : 'undefined' == typeof external.superCall ? !1 : !0; return c || b || a ? !0 : !1 }() , k = (new Date).getTime() , l = [] , m = {} , n = [] , o = [] , p = 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt' , q = { appid: function(a) { return a() }, srcappid: function(a) { return a('2919') }, clientver: function(a) { return a('20000') }, 'clienttime,mid,uuid,dfid': function(a) { return a({ clienttime: k, mid: k, uuid: k, dfid: '-' }) } } , r = function() { for (var a in q) l.push(a); !function(a) { function b(a) { if (a < l.length) q[l[a]](function(c) { if (c)if ('[object Object]' == Object.prototype.toString.call(c)) for (var d in c) m[d] = c[d];else m[l[a]] = c; b(a + 1) }); else { for (var d in m) !h[d] && (h[d] = m[d]); for (var d in h) n.push(d); if (n.sort(), n.forEach(function(a) { o.push(a + '=' + h[a]) }), c) if ('[object Object]' == Object.prototype.toString.call(c))if ('json' == g) o.push(JSON.stringify(c));else { var f = []; for (var d in c) f.push(d + '=' + c[d]); o.push(f.join('&'))} elseo.push(c); o.unshift(p), o.push(p), h.signature = faultylabs.MD5(o.join('')), e && e(h) } } b(a) }(0) }; if (c && ('[object Object]' != Object.prototype.toString.call(c) ? j = !1 : 'urlencoded' == g && (j = !1)), j && !f) { var s = !1; a(function() { KgMobileCall.callCmd({ cmd: 764, jsonStr: JSON.stringify({ get: h, post: c }), callback: function(a) { if (s) return !1; if (s = !0, a && a.status) { delete a.status; for (var b in a)!h[b] && (h[b] = a[b]); return e && e(h) } j = !1, r() } }) }) } else j = !1, r() } 'undefined' != typeof module && module.exports ? module.exports = b : 'function' == typeof define && define.amd ? define(function() { return b }) : window.getInterFacePublic = b}();

在274行發現h.signature = faultylabs.MD5(o.join('')),初步理解為signature是o內部元素拼接成字符串,對其加上斷點并將o加入watch。

0: 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt'1: 'bitrate=0'2: 'callback=callback123'3: 'clienttime=1612580098162'4: 'clientver=2000'5: 'dfid=-'6: 'inputtype=0'7: 'iscorrection=1'8: 'isfuzzy=0'9: 'keyword=花海'10: 'mid=1612580098162'11: 'page=1'12: 'pagesize=30'13: 'platform=WebFilter'14: 'privilege_filter=0'15: 'srcappid=2919'16: 'tag=em'17: 'userid=-1'18: 'uuid=1612580098162'19: 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt'length: 20

在watch里不難發現o為一個長度為20的數組,之后我們按之前理解將字符串拼接。

NVPh5oo715z5DIWAeQlhMDsWXXQV4hwtbitrate=0callback=callback123clienttime=1612580098162clientver=2000dfid=-inputtype=0iscorrection=1isfuzzy=0keyword=花海mid=1612580098162page=1pagesize=30platform=WebFilterprivilege_filter=0srcappid=2919tag=emuserid=-1uuid=1612580098162NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt

之后要js解密,這誰會?反正我不會 0.0,那也有辦法,用python調用js文件。在274行分析為md5加密,往前找看看有沒有相關函數,果真有一個,將其保存為kugou.js

'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()}

之后用python的pyexecjs庫調用, 但是注意調用的時候的名字是execjs。

代碼實現

'''data: 2021/02/05通過搜索爬取酷狗音樂,付費音樂暫時只能爬取試聽部分。'''import requestsimport reimport jsonimport timeimport execjsdef get_signature(text): ''' 獲取signature值 :param text: 格式化之后的字符串 :return: 返回酷狗網站上加密后的signature ''' # 讀取js文件內容 with open('kugou.js', 'r', encoding=’utf-8’) as f: js_str = f.read() # 通過js文件中邏輯數據,對文件進行加密 if js_str: js_obj = execjs.compile(js_str) return js_obj.call(’faultylabs.MD5’, text)def get_url(keyword): ''' 獲取搜索之后的url :param keyword: 搜索詞,如晴天 :return: 返回完整的url地址 ''' search = 'https://complexsearch.kugou.com/v2/search/song?callback=callback123&keyword={keyword}&page=1&pagesize=30&bitrate=0&isfuzzy=0&tag=em&inputtype=0&platform=WebFilter&userid=-1&clientver=2000&iscorrection=1&privilege_filter=0&srcappid=2919&clienttime={time}&mid={time}&uuid={time}&dfid=-&signature={signature}' key_code = 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwtbitrate=0callback=callback123clienttime={time}clientver=2000dfid=-inputtype=0iscorrection=1isfuzzy=0keyword={keyword}mid={time}page=1pagesize=30platform=WebFilterprivilege_filter=0srcappid=2919tag=emuserid=-1uuid={time}NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt' # 獲得13位時間戳 millis = str(round(time.time() * 1000)) p = key_code.format(time=millis, keyword=keyword) signature = get_signature(p) # print(signature) search_url = search.format(keyword=keyword, time=millis, signature=signature) return search_urldef get_data(url): headers = { ’user-agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36’, ’referer’: ’https://www.kugou.com/’, ’authority’: ’complexsearch.kugou.com’, } res = requests.get(url=url, headers=headers) # 將獲取的數據轉為json格式 data = re.findall(’callback123((.*))’, res.text, re.S)[0] json_data = json.loads(data)[’data’] hash_value = json_data[’lists’][0][’FileHash’].lower() album_id = json_data[’lists’][0][’AlbumID’] return hash_value, album_iddef get_mp3(hash_value, album_id): ''' 獲取MP3音頻文件 :param hash_value: 傳入哈希值 :param album_id: 傳入album id :return: none ''' url = ’https://wwwapi.kugou.com/yy/index.php’ params = { ’r’: ’play/getdata’, ’callback’: ’jQuery191019800824574510756_1612519333214’, ’hash’: str(hash_value), ’dfid’: ’0Q0Clh1IcZaG3ey1J70RaTiL’, ’mid’: ’b6cf66837b18642cc269390b066649dc’, ’platid’: ’4’, ’album_id’: str(album_id), } headers = { ’user-agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36’, ’referer’: ’https://www.kugou.com/’, ’authority’: ’wwwapi.kugou.com’, } res = requests.post(url=url, params=params, headers=headers) data = re.findall(’jQuery191019800824574510756_1612519333214((.*?));’, res.text, re.S)[0] json_data = json.loads(data) audio_name = json_data[’data’][’audio_name’] play_url = json_data[’data’][’play_url’] save_mp3(audio_name, play_url)def save_mp3(audio_name, play_url): ''' 保持MP3文件 :param audio_name: 傳入命名 :param play_url: 傳入音頻url :return: none ''' content = requests.get(play_url).content with open(audio_name + ’.mp3’, mode=’ab’) as f: f.write(content)if __name__ == ’__main__’: try: keyword = input(’請輸入要搜索的歌曲名稱:’) hash_value, album_id = get_data(get_url(keyword)) get_mp3(hash_value, album_id) except Exception as e: print(’請輸入正確歌曲名稱。’)

以上就是Python爬取酷狗MP3音頻的步驟的詳細內容,更多關于Python爬取酷狗MP3音頻的資料請關注好吧啦網其它相關文章!

標簽: 酷狗 Python
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩精品一区二区在线| 亚洲一区高清| 免费日韩视频| 亚洲精品自拍动漫在线| 欧美日韩一区自拍| 国产欧美综合在线观看第十页| 国产成人精品免费网站| 欧美一级艳片视频免费观看| 国产在线视频一区二区| 久久精品国产99精品国产亚洲性色| 亚洲日本丝袜连裤袜办公室| 很黄很黄激情成人| 亚洲视频图片小说| 欧美黄在线观看| 久久久99精品久久| 成人在线视频一区| 日韩欧美不卡在线观看视频| 国产不卡视频在线播放| 日韩女优毛片在线| 91啪九色porn原创视频在线观看| 久久先锋影音av鲁色资源网| 欧美成人69av| 日韩理论片网站| av成人毛片| 亚洲美女网站| 亚洲青青青在线视频| 亚洲美洲欧洲综合国产一区| 亚洲一区二区三区四区的| 亚洲免费一区二区| 美女精品一区二区| 91精品午夜视频| 不卡一卡二卡三乱码免费网站| 久久久国产综合精品女国产盗摄| 午夜精品偷拍| 亚洲免费在线视频| 一本久道久久综合中文字幕| 黑人巨大精品欧美黑白配亚洲| 日韩视频一区二区| 91捆绑美女网站| 中文字幕在线免费不卡| 99久久综合色| 亚洲视频小说图片| 91福利在线看| 成人激情综合网站| 国产精品国模大尺度视频| 亚洲免费一区二区| 国产在线播放一区| 久久天堂av综合合色蜜桃网| 影音欧美亚洲| 天天免费综合色| 欧美一区二区三区在线观看| 欧美日韩在线一区二区三区| 亚洲国产成人va在线观看天堂| 欧美日韩一区国产| 成人av影视在线观看| 国产精品久久久久久久浪潮网站 | 99re热视频这里只精品| 亚洲日本va午夜在线电影| 一本色道久久综合亚洲91| 国产99久久久精品| 国产精品不卡在线观看| 色综合久久久久久久| 成人精品鲁一区一区二区| 中文字幕制服丝袜一区二区三区| 麻豆成人精品| 懂色av中文字幕一区二区三区| 中文文精品字幕一区二区| 香蕉久久国产| 国产一区二区成人久久免费影院| 国产女人18毛片水真多成人如厕| 亚洲主播在线| 国产成人免费视频精品含羞草妖精| 国产欧美日韩久久| 久久久精品五月天| 不卡的av电影| 亚洲高清久久久| 日韩三级精品电影久久久| 亚洲日本无吗高清不卡| 国内精品伊人久久久久av影院| 国产色一区二区| 日本韩国欧美一区二区三区| 成人黄色av网站在线| 亚洲精品成人悠悠色影视| 欧美网站一区二区| 欧美三区在线| 久久国产麻豆精品| 一区在线观看免费| 欧美色图在线观看| 国产精品xxx在线观看www| 美女久久久精品| 中文字幕亚洲精品在线观看 | 亚洲美女淫视频| 欧美一卡二卡在线观看| 国产欧美一区二区视频| 风间由美一区二区av101| 亚洲一区二区三区四区中文字幕| 日韩欧美激情一区| 亚洲女同在线| 欧美在线亚洲综合一区| 精品一区二区影视| 一区二区三区欧美视频| 久久久久久亚洲综合影院红桃| 日本韩国欧美在线| 亚洲高清不卡一区| 国产成人在线影院| 亚洲不卡一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 欧美性色黄大片手机版| 一本久道综合久久精品| 成人av资源站| 久久福利资源站| 亚洲精品videosex极品| 欧美变态口味重另类| 一本久道中文字幕精品亚洲嫩| 欧美日韩亚洲三区| 国产成人在线观看免费网站| 午夜视频久久久久久| 国产精品毛片高清在线完整版| 日韩午夜中文字幕| 在线免费观看日本欧美| 99成人精品| 欧美激情第六页| 国产精品亚洲第一| 欧美aaa在线| 亚洲专区一二三| 国产精品女同一区二区三区| 91精品在线麻豆| 在线看国产一区| 亚洲在线黄色| 伊人久久大香线蕉综合热线| 99久久综合99久久综合网站| 国产一区二区三区黄视频| 丝袜美腿亚洲一区二区图片| 亚洲乱码一区二区三区在线观看| 久久久久国产精品免费免费搜索| 欧美精品aⅴ在线视频| 91九色最新地址| 免费视频一区| 日韩亚洲一区在线播放| 欧美午夜欧美| 97aⅴ精品视频一二三区| 国产精品一级二级三级| 久久99精品久久久久久久久久久久| 亚洲成人av资源| 亚洲精品乱码久久久久| 国产精品久久久久一区| 久久精品男人天堂av| 精品国产一区a| 日韩一区和二区| 欧美三区在线观看| 欧美亚男人的天堂| 欧美在线视频日韩| 色婷婷综合久色| 久久中文在线| 久久久久国产精品午夜一区| 久久福利一区| 欧美亚洲三区| 国产精品三区www17con| 国产欧美综合一区二区三区| 亚洲精品影院| 亚洲精品日韩在线观看| 一本色道88久久加勒比精品| 日韩午夜在线| 亚洲一区网站| 久久久噜噜噜久久狠狠50岁| 久久一区二区精品| 色婷婷亚洲婷婷| 在线亚洲+欧美+日本专区| 色婷婷亚洲综合| 日本韩国一区二区三区视频| 久久精彩视频| 久久三级视频| 久久国产欧美| 日本电影亚洲天堂一区| 91久久精品一区二区三| 欧美日韩五月天| 91麻豆精品国产91久久久使用方法 | 国产精品成人网| 国产精品乱子久久久久| 一色桃子久久精品亚洲| 一区二区三区四区蜜桃| 亚洲一区二区三区四区的| 日韩精品每日更新| 男女视频一区二区| 国产在线看一区| 国产精品一区专区| 波多野结衣亚洲| 欧美日韩一区二区三区在线视频| 在线成人亚洲| 久久aⅴ国产紧身牛仔裤| 日本久久精品电影| 欧美片在线播放| 精品国产91乱码一区二区三区 | 国产精品天美传媒沈樵| 国产精品黄色在线观看| 亚洲精品免费电影| 午夜亚洲福利老司机| 久久99精品一区二区三区| 成人黄色电影在线| 极品av少妇一区二区|