广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python怎么爬取MP3音频
  • 223
分享到

使用Python怎么爬取MP3音频

2023-06-06 14:06:26 223人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

使用python怎么爬取MP3音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。r: play/getdatacallback: Jquery19108

使用python怎么爬取MP3音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

r: play/getdatacallback: Jquery1910861615852090795_1612578519454hash: EF0DA656831F08B1FD2CB855BC38ED2Cdfid: 0Q0Clh2IcZaG3ey1J70RaTiLmid: 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: 0platfORMWEBFilteruserid: -1clientver: 2000iscorrection: 1privilege_filter: 0srcappid: 2919clienttime: 1612579100435mid: 1612579100435uuid: 1612579100435dfid: -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 = "NVPh6oo715z5DIWAeQlhMDsWXXQV4hwt"   , 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: "NVPh6oo715z5DIWAeQlhMDsWXXQV4hwt"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: "NVPh6oo715z5DIWAeQlhMDsWXXQV4hwt"length: 20

在watch里不难发现o为一个长度为20的数组,之后我们按之前理解将字符串拼接。

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

之后要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 = "NVPh6oo715z5DIWAeQlhMDsWXXQV4hwtbitrate=0callback=callback123clienttime={time}clientver=2000dfid=-inputtype=0iscorrection=1isfuzzy=0keyword={keyword}mid={time}page=1pagesize=30platform=WebFilterprivilege_filter=0srcappid=2919tag=emuserid=-1uuid={time}NVPh6oo715z5DIWAeQlhMDsWXXQV4hwt" # 获得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': '0Q0Clh2IcZaG3ey1J70RaTiL',  '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频道了解更多相关知识。

--结束END--

本文标题: 使用Python怎么爬取MP3音频

本文链接: https://www.lsjlt.com/news/247354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Python怎么爬取MP3音频
    使用Python怎么爬取MP3音频?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。r: play/getdatacallback: jQuery19108...
    99+
    2023-06-06
  • 怎么使用Python爬取抖音APP视频
    这篇文章主要讲解了“怎么使用Python爬取抖音APP视频”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python爬取抖音APP视频”吧!记录一下如何用python爬取app数据,...
    99+
    2023-06-15
  • Python中怎么爬取音频数据
    本篇文章为大家展示了Python中怎么爬取音频数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  分析频道下面就是开始获取每个频道中的全部音频数据了,前面通过解析页面获取到了美...
    99+
    2023-06-17
  • python怎么爬取视频
    本篇内容介绍了“python怎么爬取视频”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题目解析的爬取思路1.将所以题目的解析链接爬取出去单独...
    99+
    2023-06-02
  • 使用Python爬虫怎么避免频繁爬取网站
    这期内容当中小编将会给大家带来有关使用Python爬虫怎么避免频繁爬取网站,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型...
    99+
    2023-06-15
  • Java轻松使用工具类实现获取MP3音频时长
    获取mp3格式音频时长。 Maven依赖 <dependency> <groupId>org</groupI...
    99+
    2022-11-12
  • python怎么利用第三方库爬取热门视频和音乐
    本篇内容介绍了“python怎么利用第三方库爬取热门视频和音乐”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言安装pippip3 ...
    99+
    2023-06-02
  • python怎么读取音频文件
    要读取音频文件,你可以使用Python中的音频处理库,如pydub或wave。首先,你需要安装相应的库。你可以使用以下命令来安装py...
    99+
    2023-10-27
    python
  • python中音频文件怎么读取
    使用python读取音频文件的方法:1.新建python项目;2.导入wave和numpy模块;3.使用wave.open()方法打开音频文件;4.使用getparams()方法读取文件数据;具体步骤如下:首先,打开python,并新建一个...
    99+
    2022-10-14
  • 怎么使用python爬虫爬取数据
    本篇内容介绍了“怎么使用python爬虫爬取数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python爬出六部曲第一步:安装reques...
    99+
    2023-06-29
  • python语言怎么爬取网易云音乐
    小编给大家分享一下python语言怎么爬取网易云音乐,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!正式进入主题首先还是去找目标网页并开始分析网页结构,如下上面的三...
    99+
    2023-06-02
  • 怎么用Python获取抖音无水印视频
    这篇文章主要讲解了“怎么用Python获取抖音无水印视频”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python获取抖音无水印视频”吧!接口特点:Videoparse短视频解析接口支...
    99+
    2023-06-01
  • 使用python怎么爬取数据
    使用python怎么爬取数据?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,P...
    99+
    2023-06-14
  • Python+Selenium怎么实现短视频热点爬取
    本篇内容介绍了“Python+Selenium怎么实现短视频热点爬取”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!涉及知识点selenium...
    99+
    2023-06-30
  • 怎么使用Python爬取QQ密码
    非法获取他人的账号密码是违法行为,并且严重侵犯了他人的隐私权。强烈不建议或支持这样的行为。爬取QQ密码是非法的,且侵犯了个人隐私。违...
    99+
    2023-08-31
    Python
  • 怎么使用python爬虫爬取二手房数据
    这篇文章主要介绍怎么使用python爬虫爬取二手房数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和floa...
    99+
    2023-06-14
  • 使用 Python 从音频中提取摩斯密码
    本人并非专业人士,在部分专业名词的表述上可能会出现错误,敬请谅解 前段时间在 BugKu 做题时碰到了这么一题 铁子,来一道 - Bugku CTF (WriteUp 可见同学的博客 【BugK...
    99+
    2023-10-23
    python 音视频 开发语言 笔记
  • 怎么用Python爬取数据
    这篇文章主要介绍“怎么用Python爬取数据”,在日常操作中,相信很多人在怎么用Python爬取数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python爬取数据”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • 怎么用python爬取网站
    使用Python爬取网站的一般步骤如下:1. 导入所需的库,如`requests`或`urllib`用于发送HTTP请求,`beau...
    99+
    2023-08-31
    Python
  • python中怎么使用XPath爬取小说
    这篇文章将为大家详细讲解有关python中怎么使用XPath爬取小说,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作