午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Python爬取酷狗MP3音頻的步驟

Python爬取酷狗MP3音頻的步驟

熱門標簽:舉辦過冬奧會的城市地圖標注 螳螂科技外呼系統怎么用 地圖地圖標注有嘆號 阿里電話機器人對話 400電話申請資格 正安縣地圖標注app qt百度地圖標注 電銷機器人系統廠家鄭州 遼寧智能外呼系統需要多少錢

分析問題

音頻url

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

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

r: play/getdata
callback: jQuery1910861615852090795_1612578519454
hash: EF0DA656831F08B1FD2CB855BC38ED2C
dfid: 0Q0Clh1IcZaG3ey1J70RaTiL
mid: b6cf66837b18642cc269390b066649dc
platid: 4
album_id: 41669581
_: 1612578519455

搜索url

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

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

callback: callback123
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: 1612579100435
mid: 1612579100435
uuid: 1612579100435
dfid: -
signature: 472F60133C23184CAFC5005350C90229

JS

找到的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(""))
        }
       else
        o.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 requests
import re
import json
import time
import execjs


def 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=callback123keyword={keyword}page=1pagesize=30bitrate=0isfuzzy=0tag=eminputtype=0platform=WebFilteruserid=-1clientver=2000iscorrection=1privilege_filter=0srcappid=2919clienttime={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_url


def 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_id


def 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無損音樂搜索引擎實現代碼
  • python爬取酷狗音樂排行榜
  • Python爬蟲實戰項目掌握酷狗音樂的加密過程
  • Python反爬實戰掌握酷狗音樂排行榜加密規則

標簽:濟源 淘寶好評回訪 昭通 合肥 隨州 興安盟 信陽 阜新

巨人網絡通訊聲明:本文標題《Python爬取酷狗MP3音頻的步驟》,本文關鍵詞  Python,爬取,酷狗,MP3,音頻,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python爬取酷狗MP3音頻的步驟》相關的同類信息!
  • 本頁收集關于Python爬取酷狗MP3音頻的步驟的相關信息資訊供網民參考!
  • 推薦文章
    欧美在线一级va免费观看| 国产精品久久久久国产a级| 亚洲最新免费视频| 欧美日韩国产黄色| 91免费国产视频网站| 亚洲欧美激情四射在线日| 婷婷四月色综合| 国产精品99精品无码视| 亚洲色图制服丝袜| 国产精品欧美亚洲777777| 久久av无码精品人妻系列试探| 麻豆精品久久久| 亚洲精品一区二区在线观看| 久久最新免费视频| 6—12呦国产精品| 欧美无人高清视频在线观看| 美国av一区二区三区| 精品无码人妻一区二区三| 亚洲综合色区另类av| www.成人av.com| 久久网免费视频| 欧美午夜精品久久久久久孕妇 | 亚洲精品视频中文字幕| 亚洲熟妇av一区二区三区| 麻豆精品一区二区| 欧美在线影院在线视频| 一区二区三区影视| 欧美日韩国产在线播放网站| 欧美亚洲国产成人| 成人天堂资源www在线| 国产精品av电影| 一级片视频在线观看| 亚洲精品电影在线| 国产三级国产精品国产专区50| 中文字幕在线观看国产| 欧美不卡一区二区三区| 亚洲午夜在线观看| 四虎永久在线观看| 欧美日韩国产va另类| 国产精九九网站漫画| 国产在线视频精品一区| 亚洲三级在线免费| 欧洲一区二区日韩在线视频观看免费 | 精品999久久久| 日韩av片网站| 精品一区二区三区免费| 国产精品久久久一区| 欧美日韩一区二区三区高清| 福利一区二区在线| 亚洲精品免费一区亚洲精品免费精品一区| 在线免费一区三区| 日本女优爱爱视频| 日韩精品电影一区亚洲| 亚洲黄色片在线观看| 精品在线不卡| 日韩电影在线观看永久视频免费网站| 日本在线观看不卡视频| 国产123在线| 国产欧美一区二区视频| 色综合天天视频在线观看| 国产精品综合在线| 欧美日韩一区二区三区69堂| 毛片av中文字幕一区二区| 国产aⅴ夜夜欢一区二区三区| 久久久久久久毛片| 欧美午夜精品久久久| 国产精品嫩草影院8vv8| 亚洲美女屁股眼交| 宅男在线精品国产免费观看| 少妇av在线播放| 久久综合伊人77777蜜臀| 日韩免费不卡视频| 久久伊人精品天天| 波多野结衣影片| 干日本少妇视频| 亚洲伊人伊色伊影伊综合网| 国产综合第一页| 91视频精品在这里| 99久久免费看精品国产一区| 美日韩在线视频| 香蕉视频国产在线| 精品欧美一区二区在线观看视频| 手机av在线不卡| 亚洲精品自产拍| 久久精品国产亚洲av无码娇色| 久久久国产一区二区三区| 中文字幕手机在线视频| 国产精品99久久久久久久久久久久| 成人av一区二区三区在线观看| 成人h片在线播放免费网站| 麻豆精品一区二区综合av| 亚洲成色最大综合在线| 国产精品久久久久毛片软件| 三级视频中文字幕| 精品久久人人做人人爰| 台湾佬中文在线| 国产有码在线一区二区视频| 99久久婷婷国产| 在线免费av播放| 久久久久久九九九| 欧美国产日本韩| 精品国产一区二区三| 国产一区激情在线| 国产精品无圣光一区二区| 9.1成人看片免费版| 国产精品xxx视频| 国产精品毛片无遮挡高清| youjizz亚洲女人| 亚洲国产精品人久久电影| 四虎成人在线观看| 国产精品成人一区二区三区| 亚洲精品国产成人久久av盗摄 | 中文字幕乱码中文字幕| 自拍偷拍99| 色婷婷av一区二区三区大白胸| 亚洲性猛交xxxx乱大交| 国产精品日韩欧美| 国产亚洲成aⅴ人片在线观看| 成都免费高清电影| 91美女高潮出水| 欧美日韩国产精品一区二区三区| av一区二区三区在线观看| 亚洲综合一区二区| 国产成人一区二区精品非洲| 亚洲成人福利视频| 91精品国产一区二区三区蜜臀| 捆绑变态av一区二区三区| 黄大色黄女片18免费| 国产盗摄视频在线观看| 精品一区二区三区免费| www.国产视频.com| 欧美亚洲另类视频| 欧美日韩大陆在线| 国产中文字幕免费| 久久久久久久999| 娇小11一12╳yⅹ╳毛片| 一区二区三区天堂av| 亚洲免费电影在线| av中文字幕观看| 精品一卡二卡三卡| 国产mv久久久| 99麻豆久久久国产精品免费 | 日韩视频免费观看高清| 日韩在线观看成人| 99久久99久久免费精品蜜臀| 免费在线观看一级片| 在线观看成人av| 日韩国产精品视频| 亚洲色图制服丝袜| 亚洲图片在线播放| youjizz.com日本| 久久伦理网站| 亚洲欧美国产高清va在线播| 国产一区二区三区av电影| 日韩三级小视频| 久久久久久国产精品日本| 欧美综合在线播放| 日韩欧美在线电影| 亚洲精选中文字幕| 99久久精品情趣| 日韩1区2区日韩1区2区| 国产视频一二三四区| 波多野结衣片子| 久久久久久久久网| 亚洲jizzjizz日本少妇| 一区二区三区加勒比av| 欧美aⅴ一区二区三区视频| 欧美成人精品欧美一| 亚洲小视频网站| 91九色综合久久| 久久久久久夜精品精品免费| 正在播放91九色| 欧美亚洲免费电影| 日韩一区二区精品葵司在线| 亚洲欧美综合色| 国产婷婷在线视频| 欧美日韩一级在线观看| 丝袜老师办公室里做好紧好爽| 久久婷婷国产综合尤物精品| zzjj国产精品一区二区| 欧美成人综合网站| 精品免费在线观看| 中文字幕人成不卡一区| 成人欧美一区二区三区白人| 波多野结衣av在线免费观看| 久久久久久久久久av| 欧美妇女性影城| 国产精品自拍视频在线| 乌克兰美女av| 欧产日产国产精品98| 999热精品视频| 成年人免费在线播放| 日韩中文在线字幕| 午夜免费在线观看精品视频| 欧美人动与zoxxxx乱| 天天影视涩香欲综合网| 亚洲欧美一区二区三区国产精品| 国产成人精品综合在线观看| 国产原创中文av| 亚洲一级片免费看| 久久婷婷一区二区| 久久综合成人网| 巨胸大乳www视频免费观看| 中文字幕1区2区| 日韩久久久久久久久久久| 污视频网址在线观看| 在线观看免费看片| 中文字幕乱码在线| 三区四区在线观看| 久草国产在线视频| 9i看片成人免费看片| 国产又粗又猛又爽又黄视频 | 久久精品久久综合| 国产成人免费视频网站| 最新中文字幕一区二区三区| 欧美午夜精品久久久| 欧美高清视频不卡网| 精品日韩99亚洲| 亚洲福利在线视频| 欧美日韩免费在线| 国产在线观看黄色| 欧美精选午夜久久久乱码6080| 欧美视频在线观看免费| 日韩一卡二卡三卡四卡| 久久亚洲私人国产精品va| 欧美高清视频在线| 亚洲护士老师的毛茸茸最新章节| 亚洲成人久久久久| 日日嗨av一区二区三区四区| 视频一区二区中文字幕| 一区二区视频在线看| 制服丝袜av成人在线看| 亚洲精品小视频在线观看| 青青草原成人在线视频| 91产国在线观看动作片喷水| 国产精品一区二区三区免费视频| 国产日韩欧美在线| 日本a在线天堂| 国产一线在线观看| 在线观看日本网站| 国产精品一品视频| 亚洲欧美激情一区二区| 五月天激情综合| 中文字幕日韩精品在线| 4k岛国日韩精品**专区| 色av成人天堂桃色av| 久久精品视频在线播放| 精品无码久久久久国产| 路边理发店露脸熟妇泻火| 欧美特级黄色录像| www.亚洲激情| 久久亚洲免费视频| 精品电影一区二区| 国产精品久久久久久久久久三级| 久久亚洲精品无码va白人极品| 久久丫精品国产亚洲av不卡| 91色婷婷久久久久合中文| 亚洲精品在线免费播放| 亚洲精品中文字幕女同| 欧美一区二区.| 2025韩国理伦片在线观看| 精品国产无码AV| 日本韩国欧美三级| 2019中文字幕免费视频| 天天在线免费视频| 一级黄色片日本| 欧美性猛交bbbbb精品| 久久久久.com| 欧美日韩国产电影| 亚洲在线www| 91传媒理伦片在线观看| 亚洲国产一二三区| 欧美午夜www高清视频| 欧美大尺度激情区在线播放| 亚洲国产精品无码av| 污软件在线观看| 极品少妇xxxx精品少妇| 91精品国产色综合久久不卡蜜臀 | 欧美成人三级电影在线| 欧美一区二区三区视频在线| 精品久久久久久中文字幕动漫| 老牛影视av老牛影视av| 日韩精品亚洲专区| 欧美色综合网站| 蜜桃91精品入口| 九九九国产视频| 亚州成人在线电影| 粉嫩精品一区二区三区在线观看 | 欧美高清视频一二三区| 激情av一区二区| 日本福利一区二区| 日韩国产欧美一区| 一区二区三区免费在线| 欧美性感美女h网站在线观看免费| av成人午夜| 欧美日韩免费做爰视频| 亚洲欧美视频在线观看视频| 亚洲专区区免费| 精品国产一区二区三区久久| 亚洲 美腿 欧美 偷拍| 在线看视频不卡| 亚洲欧美日韩中文字幕一区二区三区| 中文字幕55页| 在线观看不卡视频| 黄网站欧美内射| 亚洲大片精品永久免费| 中文字幕日韩一区二区三区不卡| 久久99久久99小草精品免视看| 欧美激情精品久久久| 东方av正在进入| 亚洲成av人片在线观看香蕉| 18禁一区二区三区| 99视频在线精品| 国产精品日韩在线观看| 久久久久性色av无码一区二区| 色菇凉天天综合网| 一本大道熟女人妻中文字幕在线| 国产精品1区2区3区| 亚洲国产欧洲综合997久久| 狠狠狠色丁香婷婷综合激情| 国产又黄又爽免费视频| 三级精品在线观看| 成人在线精品视频| 国产一区二区三区精品视频| 国产精品久久999| 一级一级黄色片| 色综合久久天天| 成人激情视频网| 久久综合图片| 91人成网站www| 日韩不卡一二三区| 国产亚洲欧美一区二区三区| 中文字幕第2页| 久久久成人精品| 国产午夜福利一区二区| 亚洲黄色av女优在线观看 | 在线观看美女av| 99视频国产精品免费观看| 婷婷六月综合网| 天天操天天操天天操天天| 91久久国产自产拍夜夜嗨| 亚洲另类在线制服丝袜| 99精品视频播放| 精品日韩99亚洲| 久久精品欧美一区二区| 亚洲欧美一区二区激情| aaa在线视频| 高清免费日韩| 亚洲最大成人网4388xx| 久久久久久天堂| 一区二区av在线| 免费无码毛片一区二区app| 在线成人中文字幕| 日本熟妇毛耸耸xxxxxx| 欧洲成人午夜免费大片| 香蕉国产在线视频| 亚洲欧洲精品在线观看| 精品福利在线观看| 国产成人愉拍精品久久| 国产精品日韩一区二区| 久久国产精品99久久人人澡| 欧美深夜福利视频| 亚洲精品二三区| 日韩av电影天堂| 99精品全国免费观看| 韩国19禁主播vip福利视频| 亚洲网站免费观看| 88xx成人精品| 欧美精品久久天天躁| 亚洲第一大网站| 一级做a爰片久久毛片美女图片| 性无码专区无码| 国产91在线高潮白浆在线观看| 青青艹在线观看| 黑人巨大精品欧美一区二区小视频 | 国产成人精品一区二| 亚洲高潮无码久久| 洋洋av久久久久久久一区| 黄色av片三级三级三级免费看| 国产伦精品一区二区三区在线 | 亚洲女人初尝黑人巨大| 麻豆视频在线观看| 亚洲在线不卡| 亚洲人成网站999久久久综合| 日本v片在线高清不卡在线观看| 九九热视频免费| 国产美女在线精品免费观看| 精品国产乱码久久久久久蜜臀| 日本欧美一区二区三区| 女人黄色一级片| 翡翠波斯猫1977年美国| 精品亚洲一区二区三区在线观看| 久久日韩精品一区二区五区| 天天看天天摸天天操| 亚洲淫片在线视频| 中文字幕成人av| 一区二区视频观看| 亚洲的天堂在线中文字幕| 韩国一级黄色录像| 国产91色在线播放| 五月婷婷深深爱| 亚洲五码在线观看视频| 亚洲精品日日夜夜| 欧美日韩一区二区区| 在线观看中文字幕亚洲| a级片免费视频| 日韩精品福利视频| 亚洲不卡在线观看| 男人av资源站| 国产成人精品综合久久久|