吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 522|回复: 35
上一主题 下一主题
收起左侧

[Web逆向] python获取酷wo音乐歌单过程及实现

  [复制链接]
跳转到指定楼层
楼主
kidsmiless 发表于 2024-11-27 17:03 回帖奖励
本帖最后由 kidsmiless 于 2024-11-27 17:07 编辑

python获取酷wo音乐歌单过程及实现

一 前言

最近研究了一个音乐获取的接口,可以听歌,但是音源参差不齐,有一个宏伟的计划是自己上传音源,但比较费时。
想搞自动化,但还没有思路。音源有了,但没有歌单。由此,拿python实现,并整理成文,分享给大家,同时也加深记忆。

二 分析

打开如下网址:aHR0cDovL3d3dy5rdXdvLmNuL3BsYXlsaXN0cw==

大概长这样:

点开几个,进入详情页。观察URL,除去域名,只有两部分组成:playlist_detail 和 一串数字

结论:每个歌单的详情URL只改变了最后的一串数字(它就是itemid,后续知道的)
因此,只要找到歌单的这串数字,就可以访问到歌单详情页了

1、寻找歌单的itemid

首先想到的是,直接在歌单列表页,直接F12查看源码,看itemid是否是硬编码在代码中的。
很遗憾,代码中没有全部歌单的itemid

所以,这里使用全局搜索,从歌单详情页的URL字段入手,这里有一个很明显的字段playlist_detail,全局搜索它

有几个搜索结果,这里我们都打上断点,然后点击第一个歌单,程序停留的断点处

我们查看t.item.id的值,发现与详情url的数字相同。

结论:
1、详情url的itemid是在455115ba.js中取得的。
2、点击歌单的文字:会停留在如下代码处:

staticClass: "name",
on: {
    click: function(e) {
        return t.routeTo("/playlist_detail/".concat(t.item.id))
    }
}

3、点击歌单的封面:会停留在如下:(45115ba.js的450行左右,js文件名可能不一样)

staticClass: "cover",
on: {
    click: function(e) {
        return t.routeTo("/playlist_detail/".concat(t.item.id))
    }
}

2、构建完整的歌单url

常规思路:
自动点击歌单,跳转到详情页,直接读取当前页面的地址,就取得了歌单的完整url了。

逻辑没问题,但是当进入详情页后,返回上一个歌单列表页时,永远都会在歌单的第一页上。也就是说,这样的逻辑每次只能抓取一页的歌单,大概25个。

我的思路:
在点击歌单后,不进行跳转,同时取得itemid--也就是歌单URL末尾的一串数字。

三 实现过程

1、js部分

想实现点击不跳转,必须在js中截获点击的函数。

这里我使用抓包工具charles对455115ba.js文件进行直接替换。
先将455115ba.js文件保存到本地,然后修改 点击处跳转 的代码。

如下图:

虽然我们在点击歌单时,可以在js中获取itemid,但是还需要将该值传递给python
因此,这里使用如下办法:
使用js动态创建一个div,并设置id为myDiv
使用该div存放itemid,python通过获取div来得到itemid

如下图:

2、python爬取

爬取过程分为两部分
1 是爬取歌单url以及封面等基本信息
2 是根据1中得到的歌单文件data.json,去爬取每个歌单中的曲目信息,最后生成一个ret.json文件

如下图:

在爬取歌单时,因歌单过多,这里可以选择过滤下。在kuwo.py中编辑过滤的关键字。如下图

目前代码设置读取10页的歌单数据,可以自行修改,如下图:

3、完整代码以及使用说明

1、先使用抓包工具替换修改后的js代码,这里是45115ba.js(2024-11-27实验结果)
2、若kuwo中,没有45115ba.js,请自行按文中方式,找到类似的文件。并在点击封面时,替换如下代码:

// 通过ID获取div元素  
var myDiv = document.getElementById("myDiv");  

// 判断div元素是否存在  
if (!!myDiv) {  
    // 如果myDiv不是null,表示元素存在  
    console.log("div元素存在");  
    myDiv.textContent = ""
    // 可以在这里对myDiv进行操作,比如修改其内容等  
    myDiv.textContent = t.item.id+''//"div元素的内容已被修改";  
} else {  
    // 如果myDiv是null,表示元素不存在  
    console.log("div元素不存在");  
    // 可以选择在这里添加一个新的div元素到DOM中  
    var newDiv = document.createElement("div");  
    newDiv.id = "myDiv";  
    newDiv.textContent = t.item.id+''//"这是一个新添加的div元素";  
    document.body.appendChild(newDiv);  
}

3、js文件搞定后,运行kuwo.py文件,得到data.json歌单文件
4、确认data.json文件存在内容,运行kuwo_song.py文件,得到ret.json 即为包含歌曲文件。

demo链接:
https://pan.baidu.com/s/1URLxroXAFqcDIIv5-dz6LQ  密码:2x05





免费评分

参与人数 10威望 +1 吾爱币 +27 热心值 +8 收起 理由
zzoochen + 1 + 1 我很赞同!
JQ1688 + 1 建议贴主持续更新!
sngss + 1 谢谢@Thanks!
gluttonPride + 1 我很赞同!
zs668899 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
糊涂慎言 + 1 + 1 我很赞同!
caicai077 + 1 我很赞同!
jjyyqwery + 1 + 1 用心讨论,共获提升!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dream20241111 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
dream20241111 发表于 2024-11-27 17:33
感谢分享         
3#
YOjohnny 发表于 2024-11-27 17:48
4#
yangfan233 发表于 2024-11-27 17:51
5#
Foreverday 发表于 2024-11-27 18:02
学习一下思路,最近在做一些公有数据的收集用到一些爬虫知识,目前正在学习
6#
jjyyqwery 发表于 2024-11-27 18:08
感谢分享
7#
GF52kj 发表于 2024-11-27 18:20
感谢分享
8#
XXKzz0 发表于 2024-11-27 18:21
不错不错
9#
ztz3421 发表于 2024-11-27 18:30
感谢感谢分享
10#
syz17213 发表于 2024-11-27 18:30
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 04:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表