网易云批量解析歌单音乐【不限音质】

引言

本次借用的是一个api解析接口
https://api.toubiec.cn/wyapi.html
有兴趣的可以看一下咯

过程

首先填入必须的内容测试一下

图片[1]-网易云批量解析歌单音乐【不限音质】-小魏博客

产生了两个请求

第一个

图片[2]-网易云批量解析歌单音乐【不限音质】-小魏博客

他只是拿到一个token值,应该是在下一步请求有作用,作为请求参数使用的。

图片[3]-网易云批量解析歌单音乐【不限音质】-小魏博客

哦吼,果然,但是呢,这两个token好像不一样的嘞。

第一个

token: “576986637110cba1d6d54ba497a6c535”

第二个负载中的请求

token: “fdaae74c208b3a6e631180a0b367578b”

这个时候有经验的小伙子应该有头绪了吧,需要逆向呗,熟悉开发的应该可以直接看出来大概是什么加密

好家伙来吧,断xhr请求查呗

先复制一下请求地址

图片[4]-网易云批量解析歌单音乐【不限音质】-小魏博客

添加到断点中

图片[5]-网易云批量解析歌单音乐【不限音质】-小魏博客

再次点击解析

断到js文件了,跳出函数看看

发现了这个请求过程

图片[6]-网易云批量解析歌单音乐【不限音质】-小魏博客

其中有一个
b就是第一次请求的token值
咋们看看他到底把这个token怎么搞的,看this

图片[7]-网易云批量解析歌单音乐【不限音质】-小魏博客
图片[8]-网易云批量解析歌单音乐【不限音质】-小魏博客

跳转到这个代码的位置

图片[9]-网易云批量解析歌单音乐【不限音质】-小魏博客
图片[10]-网易云批量解析歌单音乐【不限音质】-小魏博客

妥妥的MD5加密,还是32位小写的
测试一下呗

上面提到的

图片[11]-网易云批量解析歌单音乐【不限音质】-小魏博客

实用工具:https://www.sojson.com/md5/

图片[12]-网易云批量解析歌单音乐【不限音质】-小魏博客

是不是一样的??比较简单吧,现在使用python代码还原一下请求过程

首先模拟获取初始token 的值代码

headers_token = {
    'origin': 'https://api.toubiec.cn',
    'referer': 'https://api.toubiec.cn/wyapi.html',
}

response_token = requests.post('https://api.toubiec.cn/api/get-token.php', headers=headers_token)
print(response_token.text)
token_data = response_token.json()  # 将响应转换为JSON
token_token = token_data['token']  # 获取token值

然后把这个值进行MD5加密

md5_hash = hashlib.md5(token_token.encode()).hexdigest()

在第二步请求的时候注意下

头部会增加第一次请求获得的token

图片[13]-网易云批量解析歌单音乐【不限音质】-小魏博客

所以请求头需要改动一下

headers = {
    'authorization': f'Bearer {token_token}',
    'origin': 'https://api.toubiec.cn',
    'referer': 'https://api.toubiec.cn/wyapi.html',
}
m_yy = 'https://music.163.com/song?id=23285358'


json_data2 = {
    'url': m_yy,
    'level': 'standard',
    'type': 'song',
    'token': md5_hash,
}

response2 = requests.post('https://api.toubiec.cn/api/music_v1.php', headers=headers, json=json_data2)
print(response2.text)

这样子我们就模拟了整个过程

现在就是拿到网易云歌单的链接,然后循环解析咯

值得注意的是,经过测试

音质是负载中的level,
分别是
1. 标准音质 (standard)
2. 极高音质 (exhigh)
3. 无损音质 (lossless)
4. 高解析度无损 (hires)
5. 高清环绕音 (jyeffect)
6. 沉浸环绕硬音 (sky)
7. 超声母带 (jymaster)

拿到网易云歌单批量链接

首先随便选择一个歌单

https://music.163.com/playlist?id=9307596864&uct2=U2FsdGVkX1+ajxNilGFrD9UhiclOXV0nGWTVeXHD0kU=

浏览器访问测试一下,

图片[14]-网易云批量解析歌单音乐【不限音质】-小魏博客

哦吼,这不是完犊子了吗,但是我记得之前明明可以查看全部列表的,后来查阅了一些资料,当请求cookies中存在

os=pc

才会显示全部,测试一下呗

经过查询在下面这个请求里面有音乐名称的数据

图片[15]-网易云批量解析歌单音乐【不限音质】-小魏博客

ok,直接模拟

使用xpath提取数据

图片[16]-网易云批量解析歌单音乐【不限音质】-小魏博客

但是呢,提取结果并不如意

图片[17]-网易云批量解析歌单音乐【不限音质】-小魏博客

提取结果并不是我们想要的,要么就是xpath规则写错了,但是我绝对没错。哇咔咔

但是从提取结果来看应该是使用了js动态生成内容

直接输出一下源代码看一下

图片[18]-网易云批量解析歌单音乐【不限音质】-小魏博客

ok,现在重写规则。

图片[19]-网易云批量解析歌单音乐【不限音质】-小魏博客

直接完美,上代码

import requests
from lxml import etree

cookies = {
    'os': 'pc',
    'nts_mail_user': '15682979226@163.com:-1:1',
    'NMTID': '00Ob4PcY-remTf0BUhgm1b_ew60qfsAAAGVdit-gw',
    '_iuqxldmzr_': '32',
    '_ntes_nnid': '11ff561585afaf64b9f00c09f0efc244,1741444316564',
    '_ntes_nuid': '11ff561585afaf64b9f00c09f0efc244',
    'WEVNSM': '1.0.0',
    'WNMCID': 'jxrrtt.1741444324907.01.0',
    'sDeviceId': 'YD-yGWvWEjUqgtAQgEUFFOGY388SKAZ60CH',
    'WM_TID': 'zHnnWsC6nLRAEAVRREfXcn85SaU1ObXu',
    'ntes_utid': 'tid._.3D0cx8AMvtNER0BQFALTIm85WORlZfQg._.0',
    '__snaker__id': 'ZCgv4w7YrXSYfCKl',
    'MUSIC_U': '00B25D2A1748CBB5AB10443E7AADDDB7E3F73E8A8EB6EDDA9F83895C54DEF9C5C9E5B0C0C5CEE6E57151D96E904A4473DE8CD003300CE663455CE289EA3FB0BFC651D31A8C6DA98504E1C98BE2178B853DADCD517AA778CD7704F0A1F1EDB215FF746707FE53006D43B4194E4C4641AF947A61793E314F966EB38C50B09B91AF97D435E211327F861A7EBD5C6F4B9FEFE1C31B72D5F12DF2CF56762F4379435B79FD1C1D1604067F639847030858C9BB7CD3376EF789AB9BD1F332683D32015FA4B81331EDA67CC59B74174970135B94D4C88C933886013347D36ACA00641F234BEA9B09FD7B01A66E37F47A38D3C1BEECCFDF462D5CEEA9CA3D3C5A37D9007298F8B46DED9F212E46EA8FB00A24B03ECD8FF2B64E3DB4642B377FC9F85B3ABC90AB8B1AD7C4897E6F721A9CD048C41AB4DE030F37AFD82EF70E779401F69384990E1B781BF8C2DBA89D5A1E5205A0B0196C15B1C2949021A45D27E57E6F8F4CB6',
    'ntes_kaola_ad': '1',
    'gdxidpyhxdE': 'SSrSqxh2ysB%2B3sKxl1GJoU4VrMqbwEAOfrPOZRfLDOHnRqT36YTuVv44kYSOCpWxCNQoAfaHjpnjg4bITsxtLM3r19YPgYNIRIYETts2hhyRVbLk%5CHyEkJxqEdG7c4EL%2FE948vK91oG6BCpPz3n%2FSPLoENghNeKQrpUg9%2BCEZeuJMrna%3A1741757975122',
    'NTES_P_UTID': 'wRA2Wnuml77FpM91xrb7iW86unNv7Cts|1743487482',
    'P_INFO': 'm15682979226@163.com|1743487482|1|d90_client|00&99|CN&1743474928&d90_client#CN&null#10#0#0|156226&1|d90_client|15682979226@163.com',
    '__csrf': '6a695cc404b6237b1135f9a864b26c35',
    'JSESSIONID-WYYY': 'oNv5%2Bp3UXF%5CI5zp9lm6UE%2BcH7%5Cz1snU%5C%2FsjUNwrF7d5SHsceo5akWK2K%5C7KSgjl6%2FF58Z1pU5880%2FUj%5CQ30XmaptQjaz5U%2F70cXgY2OdP%5CnVoAJvbE58%2FwGpOCm%2F%2FwY8s8gi1XV6HZl%5C8TMStfvcD1s2yJkHcY6VZFAJ2aJPMzxRaq1u%3A1744194453911',
    'WM_NI': 'GnBzn1TOs8ilb%2BqNCJZdRROlXQwTSZ85IVAO%2Fu9YkUQ1k4CsaHvDr%2F%2FVQH%2B6eQO71RDO8XI2R5w0ZWNwUfSSEHqIBLDEuEDvozgX%2Fs0O1eVSnNxu5GunNfW7PMOYia%2FmWGE%3D',
    'WM_NIKE': '9ca17ae2e6ffcda170e2e6ee92d564b0ecad8ec4639a968ab7c15b828a8aadc75c83bf89ccf73daa94898bca2af0fea7c3b92a85b28e9bed3b9891bdd9ec68a2f5bfafc2429abc9eb3ce689c8fb9b5d252fceb87b7c445edabf7baea5f93efa5d5c279a398baa5f125ed8a9fa9aa3ea78f81d8b45a8891f8b9cc3a92ebb9d1d95d8ea99b87d2598798bfaac148889bbba6c77eada6a9b9ae79f491ff86d559ae92b896b84db7b28287d63d949381baec6bedb399a8c837e2a3',
}

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'zh-CN,zh;q=0.9',
    # 'cookie': 'nts_mail_user=15682979226@163.com:-1:1; NMTID=00Ob4PcY-remTf0BUhgm1b_ew60qfsAAAGVdit-gw; _iuqxldmzr_=32; _ntes_nnid=11ff561585afaf64b9f00c09f0efc244,1741444316564; _ntes_nuid=11ff561585afaf64b9f00c09f0efc244; WEVNSM=1.0.0; WNMCID=jxrrtt.1741444324907.01.0; sDeviceId=YD-yGWvWEjUqgtAQgEUFFOGY388SKAZ60CH; WM_TID=zHnnWsC6nLRAEAVRREfXcn85SaU1ObXu; ntes_utid=tid._.3D0cx8AMvtNER0BQFALTIm85WORlZfQg._.0; __snaker__id=ZCgv4w7YrXSYfCKl; MUSIC_U=00B25D2A1748CBB5AB10443E7AADDDB7E3F73E8A8EB6EDDA9F83895C54DEF9C5C9E5B0C0C5CEE6E57151D96E904A4473DE8CD003300CE663455CE289EA3FB0BFC651D31A8C6DA98504E1C98BE2178B853DADCD517AA778CD7704F0A1F1EDB215FF746707FE53006D43B4194E4C4641AF947A61793E314F966EB38C50B09B91AF97D435E211327F861A7EBD5C6F4B9FEFE1C31B72D5F12DF2CF56762F4379435B79FD1C1D1604067F639847030858C9BB7CD3376EF789AB9BD1F332683D32015FA4B81331EDA67CC59B74174970135B94D4C88C933886013347D36ACA00641F234BEA9B09FD7B01A66E37F47A38D3C1BEECCFDF462D5CEEA9CA3D3C5A37D9007298F8B46DED9F212E46EA8FB00A24B03ECD8FF2B64E3DB4642B377FC9F85B3ABC90AB8B1AD7C4897E6F721A9CD048C41AB4DE030F37AFD82EF70E779401F69384990E1B781BF8C2DBA89D5A1E5205A0B0196C15B1C2949021A45D27E57E6F8F4CB6; ntes_kaola_ad=1; gdxidpyhxdE=SSrSqxh2ysB%2B3sKxl1GJoU4VrMqbwEAOfrPOZRfLDOHnRqT36YTuVv44kYSOCpWxCNQoAfaHjpnjg4bITsxtLM3r19YPgYNIRIYETts2hhyRVbLk%5CHyEkJxqEdG7c4EL%2FE948vK91oG6BCpPz3n%2FSPLoENghNeKQrpUg9%2BCEZeuJMrna%3A1741757975122; NTES_P_UTID=wRA2Wnuml77FpM91xrb7iW86unNv7Cts|1743487482; P_INFO=m15682979226@163.com|1743487482|1|d90_client|00&99|CN&1743474928&d90_client#CN&null#10#0#0|156226&1|d90_client|15682979226@163.com; __csrf=6a695cc404b6237b1135f9a864b26c35; JSESSIONID-WYYY=oNv5%2Bp3UXF%5CI5zp9lm6UE%2BcH7%5Cz1snU%5C%2FsjUNwrF7d5SHsceo5akWK2K%5C7KSgjl6%2FF58Z1pU5880%2FUj%5CQ30XmaptQjaz5U%2F70cXgY2OdP%5CnVoAJvbE58%2FwGpOCm%2F%2FwY8s8gi1XV6HZl%5C8TMStfvcD1s2yJkHcY6VZFAJ2aJPMzxRaq1u%3A1744194453911; WM_NI=GnBzn1TOs8ilb%2BqNCJZdRROlXQwTSZ85IVAO%2Fu9YkUQ1k4CsaHvDr%2F%2FVQH%2B6eQO71RDO8XI2R5w0ZWNwUfSSEHqIBLDEuEDvozgX%2Fs0O1eVSnNxu5GunNfW7PMOYia%2FmWGE%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee92d564b0ecad8ec4639a968ab7c15b828a8aadc75c83bf89ccf73daa94898bca2af0fea7c3b92a85b28e9bed3b9891bdd9ec68a2f5bfafc2429abc9eb3ce689c8fb9b5d252fceb87b7c445edabf7baea5f93efa5d5c279a398baa5f125ed8a9fa9aa3ea78f81d8b45a8891f8b9cc3a92ebb9d1d95d8ea99b87d2598798bfaac148889bbba6c77eada6a9b9ae79f491ff86d559ae92b896b84db7b28287d63d949381baec6bedb399a8c837e2a3',
    'priority': 'u=0, i',
    'referer': 'https://music.163.com/',
    'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'iframe',
    'os': 'pc',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
}

response = requests.get(
    'https://music.163.com/playlist?id=9307596864&uct2=U2FsdGVkX1+ajxNilGFrD9UhiclOXV0nGWTVeXHD0kU=',
    cookies=cookies,
    headers=headers,
)

html = response.text

# 创建HTML解析对象
parser = etree.HTMLParser()
tree = etree.HTML(html)

# 使用XPath提取歌曲链接和歌曲名称
tree = etree.HTML(html)
song_links = tree.xpath('//ul[@class="f-hide"]/li/a/@href')
print(song_links)

他的完整链接应该是
https://music.163.com/song?id=2159786566

so增加组合完整链接

output = []
for song_link in song_links:
    full_link = "https://music.163.com" + song_link
    output.append(full_link)

然后写入txt文件中看一下

with open("links.txt", "w") as file:
    for link in output:
        file.write(link + "\n")
图片[20]-网易云批量解析歌单音乐【不限音质】-小魏博客

ok现在链接全部搞完了,直接就是循环解析并且下载了

最后上所有代码

至此结束啦,也就是逆向一个接口负载,主要用的是,MD5加密,其余的没什么的。

查看更多心仪的内容 按Ctrl+D收藏我们
部分内容来自于网络 如有侵权请联系站长删除
小魏博客欢迎你来投稿文章
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容