利用 Python 爬虫技术破解网易云音乐 JS 接口,快速获取歌曲数据

利用 Python 爬虫技术破解网易云音乐 JS 接口,快速获取歌曲数据

随着技术的不断发展,越来越多的开发者开始探索如何利用 Python、JavaScript 和爬虫技术获取互联网上的有价值数据。今天,我将带你走进一个有趣的技术领域——通过逆向网易云音乐的 JS 接口,快速获取歌曲数据。这不仅有助于加深你对爬虫技术的理解,还能帮助你更好地掌握 JavaScript 加密算法与请求构造的技巧。
利用 Python 爬虫技术破解网易云音乐 JS 接口,快速获取歌曲数据_第1张图片

背景

网易云音乐是国内最大的音乐平台之一,拥有丰富的音乐资源。在爬虫的应用中,如何从网站中提取数据是核心问题之一。尤其是在面对加密接口时,如何分析和破解这些加密机制往往是技术的难点。

今天,我们将通过 PythonJavaScript 的结合,实现爬取网易云音乐歌曲信息的功能。通过逆向网易云音乐的 JS 接口,我们可以轻松破解加密机制,获取到歌曲的详细信息。

关键步骤解析:

首先,我们需要准备一些基本的请求头和 Cookie,以便模拟浏览器的请求。下面是我们需要用到的 headerscookies 配置:

import requests
import execjs

headers = {
    "accept": "*/*",
    "accept-language": "zh-CN,zh;q=0.9",
    "cache-control": "no-cache",
    "content-type": "application/x-www-form-urlencoded",
    "nm-gcore-status": "1",
    "origin": "https://music.163.com",
    "pragma": "no-cache",
    "priority": "u=1, i",
    "referer": "https://music.163.com/search/",
    "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": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "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"
}
cookies = {
    "NTES_P_UTID": "sS3kfyQlxptFAkW243sTmOaWdxoK9ORc|1728789158",
    "P_INFO": "[email protected]|1728789158|0|mail163|00&99|sic&1727405394&mail163#sic&510400#10#0#0|&0||[email protected]",
    "nts_mail_user": "[email protected]:-1:1",
    "NMTID": "00OHYepIiXkGTvlukKQgF2HpnNvF8IAAAGTh2g5fQ",
    "_iuqxldmzr_": "32",
    "_ntes_nnid": "4640a8c32b20a3853730754afce96f3e,1733143574845",
    "_ntes_nuid": "4640a8c32b20a3853730754afce96f3e",
    "WEVNSM": "1.0.0",
    "WNMCID": "czilew.1733143575040.01.0",
    "WM_NI": "u7PQ0EafnNRVhEFsN%2FEdgM8oz8vY%2Bu2QCLPwiAsctusnvdJm6MD4KHN9SPfikydT4VUjzqvFv7FJoGRQrA8QY3J2lkRJENloUSJWltA1D2TI8LF8ZBdDA9lDws65fMlsaHE%3D",
    "WM_NIKE": "9ca17ae2e6ffcda170e2e6eeb9d068a18d8ba9e97bf2eb8fb6c54e939e9bb1d660b48fbf82d94fb59ff7b3f02af0fea7c3b92ab7e9a0b2b34fa3baa2afd15eac9b8a94cd2587bca9aebb65bae8babaaa7ff28f8dadd37dab9fbd84f77fb1b2ba85c967f6938cd5ca448ee79db1e563a9a7acb5b75e97b6b692f54eb6e98aabee4d928fbea2bb5b9bed86d3ef6192968bafef65978d86b8ef8083ef8cd3d743fc948ad9d94aa89c8fdaef50b5adfad6e547b0adafa9c837e2a3",
    "WM_TID": "i5izftdWa5hEQEVVEQbTW8B6OJQ1V8Ez",
    "sDeviceId": "YD-Uzc6b9ISeyVBBhVBBVKCDtBvKJUhJ1BZ",
    "ntes_utid": "tid._.J2UKGs6nkBNBVkEVQVeGT9R%252FPIUxcifI._.0",
    "__snaker__id": "9IQZDoHKwTbihU9B",
    "__remember_me": "true",
    "MUSIC_U": "00E628017F7D206D10D10C8AC578FD70BC07B37EF783A27ED7089364D1CF79EDEC9EEDF0EA0AF4F937DE305FE4103A6A282C05FAAC310B5E4C3AD2DD519EB0954BD2089695CBA3BA43A5440C9A361661CD26B2937F9DD976004C317E624BE5C744900FCCEEF1613827565231DD3B48EB637B1E8959EBC723C27475C22A0EE0FB700697600A330CB0B99FB008A4F5B38DAACDA5E2701803504E25971D9425D7113A31FF2616420F9A8AD023B74DEB0576AE9F5884756A75BEB27BDA7CEC7B30D2BB2DD6E2766160223F13275467419F18984A86B9F2DF2183C4B3B938CD347EEA096B59B6D3EEF1A80352ADFA23DA72FF6C2B26994A2A92D63EB128BAB05C912F4233BC5EADC98905777B7F0148F7A390B4632C5A804D4598E65FE301538948EB92A8B1FA38FA255EDDD6D6561F432A861BE8503F7030B9DB0ADA73A0E80DE3E60D55B0FE3AF1A1C6CDFB4B07CED5A9057FBFA68FC371C5193B304E58F9038A4C04",
    "__csrf": "f23d9b6d1a9b2dce2dedbd166bad9f9d",
    "ntes_kaola_ad": "1",
    "gdxidpyhxdE": "zqsOeQwLgv9kdyXHdwr1xoyY2bxIJOcZaRLsJAtEwIfAfWW7%2BNteUrcXUcIead4RD3q02ZhCsNAQ0OGBqezfxOHs9nGdiqqx%5CUZvKVZYnySTdCq7%2BQ%2BANVXGlrhRb55Q5qXX6Uel6%2Fy7iSouCnmkYdRb9Ac0UNYRI9WiIHe%5C0pZhJw2u%3A1733146990085",
    "JSESSIONID-WYYY": "HnFgDaYF8Z8bjQhAbCtV%5CG%2FFCChkHfoqr4q1Pc4%5CCwpTqzuQnayxAhcQ0gQtzWlpWceIhxsFI%5CPpqrX0tgQpkDmukr0vFl7noUkvnUnkxt2bj9SIFvewfZ53MmKv8OXacMv5%2F9%5Cl8DgbOPyd1h5A89Jb5xtsKvF3XdaqpbdiINMe%5Com9%3A1733149845764"
}
url = "https://music.163.com/weapi/cloudsearch/get/web"
params = {
    "csrf_token": "f23d9b6d1a9b2dce2dedbd166bad9f9d"
}

js_code = open("spider.js", "r", encoding='utf-8').read()

i8a = {
    "hlpretag": "",
    "hlposttag": "",
    "s": "周杰伦",
    "type": "1",
    "offset": "0",
    "total": "false",
    "limit": "30",
    "csrf_token": "f23d9b6d1a9b2dce2dedbd166bad9f9d"
}

params = execjs.compile(js_code).call("get_params", i8a)

print(params)

data = {
    "params": params['encText'],
    "encSecKey": params['encSecKey']
}
response = requests.post(url, headers=headers, cookies=cookies, params=params, data=data)

print(response.json())
for item in response.json()['result']['songs']:
    print(item)

###完整的代码在 https://cainiao-coder.com/

你可能感兴趣的:(利用 Python 爬虫技术破解网易云音乐 JS 接口,快速获取歌曲数据)