网易云音乐params和encSecKey参数生成代码

本文详细介绍了如何使用Python实现网易云音乐params和encSecKey参数的AES加密生成过程,包括所需库的导入和关键函数的实现,适合开发者理解和调用云音乐API。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网易云音乐params和encSecKey参数生成代码

不废话,直接上code

import requests
import json
import base64
import random
import time
from Crypto.Cipher import AES

param2 = "010001"
param3 = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
param4 = "0CoJUm6Qyw8W8jud"

headers = {
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36',
        'accept': 'application/json, text/javascript',
        'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'accept-encoding': 'gzip, deflate, br',
        'content-type': 'application/x-www-form-urlencoded',
        'origin': 'https://y.music.163.com/',
        'referer': 'https://y.music.163.com/',
        'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
        'sec-ch-ua-mobile': '?1',
        'sec-ch-ua-platform': '"Android"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-site',
        'cookie': r"_ntes_nuid=2ac8c16b8b7a5990b7653b3f00352c5c; NMTID=00O9pqPpG3xToGCEEB_sxLjuTTFaeIAAAF6DdHQGA; WEVNSM=1.0.0; WNMCID=upjbvc.1623729490413.01.0; UM_distinctid=17e2a7af88aa4-0d361aa8112afa-57b1a33-144000-17e2a7af88b776; nts_mail_user=huangkun2214@163.com:-1:1; NTES_CMT_USER_INFO=473327494|有态度网友0sdCu6|http://cms-bucket.nosdn.127.net/2018/08/13/078ea9f65d954410b62a52ac773875a1.jpeg|false|aHVhbmdrdW4yMjE0QDE2My5jb20=; NTES_P_UTID=qOVKrRhA2H3Le6RPh3unIpFkQyOdbXrY|1655177976; NTES_SESS=Dy.LJyx1AbAGUojavuy_PzU7cd5PmJMxKFzFwvpIfhsqnx2OnJy7pcpDFrc0ELpH8j_ctkVXPaMKRkPWJonVnefEaiRYXhCJpObGd6uShVPxbkYUNxVVZmZ4GwD.4itR9oTRFePEnLlXQsxzdGSShMvr8lhJNvzL4CVbDwHmsxMLBSxhc5XHSDpO0zhrahKtg.f8wT3KkFhBc; S_INFO=1655177976|0|3&80##|huangkun2214; P_INFO=huangkun2214@163.com|1655177976|0|mail163|00&99|sic&1654673001&mail163#sic&510100#10#0#0|&0|mail163|huangkun2214@163.com; _ntes_nnid=2ac8c16b8b7a5990b7653b3f00352c5c,1655774608247; JSESSIONID-WYYY=YYkjlmd8b+khHIQ1r/BxXH+gdKGX7o2PR+npcvmmUfUsEBx8+q6jaDJzCC3K38+NjvgaZ+5A5AJl5qyFNaeOFYvciJ+/tum1wSKhAjg\DwZAxdt0+KNWb\fWeKMYy\Fv9v6WFn1WigPCFKKn+/zPIlS86b/KGfQB7ZgHohk\yFtNSdME:1655776582565; _iuqxldmzr_=33; MUSIC_U=11c69a9f6453811fe96466ea5fdf548812260bdebc170159bd15846699c0617f993166e004087dd313444d6e0dd974215692fd9cfad900b27ee0030a3af84dc9e35489bde11bcd6fd4dbf082a8813684; __remember_me=true; __csrf=02f2a8e857750826c3404d236c13ac4a; ntes_kaola_ad=1"
    }


def AES_encrypt(text, key, iv):
    pad = 16 - len(text) % 16
    text = text + pad * chr(pad)
    text = text.encode("utf-8")
    encryptor = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
    encrypt_text = encryptor.encrypt(text)
    encrypt_text = base64.b64encode(encrypt_text)
    return encrypt_text.decode('utf-8')

def asrsea(p1, p2, p3, p4):
    res = {}
    rand_num = "aq9d7cvBOJ1tzj1o"
    vi = b"0102030405060708"
    h_encText = AES_encrypt(p1, p4, vi)
    h_encText = AES_encrypt(h_encText, rand_num, vi)
    res["params"] = h_encText
    res["encSecKey"] = "5dec9ded1d7223302cc7db8d7e0428b04139743ab7e3d451ae47837f34e66f9a86f63e45ef20d147c33d88530a6c3c9d9d88e38586b42ee30ce43fbf3283a2b10e3118b76e11d6561d80e33ae38deb96832b1a358665c0579b1576b21f995829d45fc43612eede2ac243c6ebb6c2d16127742f3ac913d3ac7d6026b44cee424e"
    return res

def form_data(song_id):
	'''传入歌曲id获取请求参数'''
	param1 = json.dumps({"ids":"["+str(song_id)+"]","level":"standard","encodeType":"aac","csrf_token":""})
	asrsea_res = asrsea(param1, param2, param3, param4)
	return asrsea_res

form_data(1954696523)

返回的params和encSecKey运行结果:

{‘params’:‘bEI8cDkUhQUV4TEhBa0ENDjQmWEaZ8dGdK8qd5uEZtM9q4J4lPjIcF1JUGTTXFZ1KeVsTSh/S/nNJ0UCKs8t5dGy7zwftag4QiguFmmKkuiWZkZo3nKJzsbK6dcfLWEdliKRY76SYDxqeCV5jUXTk3C0Dym64wPd41EisPilF5quqJkNug6a7hmkFeptDPdC’,
‘encSecKey’:‘5dec9ded1d7223302cc7db8d7e0428b04139743ab7e3d451ae47837f34e66f9a86f63e45ef20d147c33d88530a6c3c9d9d88e38586b42ee30ce43fbf3283a2b10e3118b76e11d6561d80e33ae38deb96832b1a358665c0579b1576b21f995829d45fc43612eede2ac243c6ebb6c2d16127742f3ac913d3ac7d6026b44cee424e’}

<think>好的,我现在需要帮助用户解决如何使用Python的requestsBeautifulSoup库来爬取网易云音乐的评论数据。首先,我得回顾一下用户提供的引用内容,看看有没有相关的信息。根据引用[2]引用[4],用户之前的问题涉及到使用requests、BeautifulSoup,甚至提到了处理加密数据解析JSON。但用户现在明确想用requestsBeautifulSoup,而网易云音乐的评论数据可能涉及到动态加载加密参数,这可能需要进一步的探索。 首先,我应该确认网易云音乐评论数据的获取方式。通常,网易云音乐的评论数据是通过API接口返回的JSON数据,而不是直接嵌入在HTML页面中。这意味着直接使用BeautifulSoup解析HTML可能无法获取到评论,因为数据是动态加载的。不过,用户可能希望用requests发送请求,然后解析返回的数据,这时候可能需要找到正确的API接口参数。 根据引用[2]提到的,需要处理加密数据,可能涉及到cryptography库。但用户现在想用requestsBeautifulSoup,所以可能需要找到如何构造请求的参数,尤其是加密的部分。例如,网易云音乐的API接口可能需要特定的加密参数,如paramsencSecKey,这些参数可能需要通过JavaScript生成,或者找到生成它们的方法。 接下来,我需要考虑如何模拟这些加密参数。通常,这可能涉及到分析网页的JavaScript代码,找到加密函数,并用Python重新实现。这可能比较复杂,尤其是对于新手来说。不过,是否有其他方法呢?比如,是否有公开的API或者参数生成方式可以参考? 根据引用[4],用户之前爬取的是歌单数据,可能涉及到解析HTML元素,但评论数据可能不同。因此,我需要指导用户如何找到评论的API接口,构造正确的请求头数据,处理加密参数,然后解析返回的JSON数据。 步骤可能包括: 1. 分析网易云音乐网页端评论数据的网络请求,找到API的URL所需参数。 2. 确定如何生成加密参数,比如paramsencSecKey。 3. 使用requests发送POST请求到API接口,携带必要的headersdata。 4. 解析返回的JSON数据,提取评论内容。 5. 处理分页,实现翻页功能。 但用户想使用BeautifulSoup,而评论数据通常不是HTML格式,而是JSON,所以BeautifulSoup可能用不上,除非用户想解析其他部分。但根据用户的需求,可能需要在回答中解释这一点,建议使用json库来解析响应数据,而不是BeautifulSoup。不过用户明确提到要使用BeautifulSoup,可能需要进一步澄清,或者指出在评论数据爬取中BeautifulSoup可能不适用,但歌单数据可能适用。 现在,我需要整理出一个示例代码,使用requests发送请求到评论API,处理加密参数,并解析JSON响应。同时,可能需要引用之前的参考资料,比如引用[2]提到使用cryptography库解密数据,但可能在实际操作中,参数生成需要其他方法,比如逆向工程JavaScript代码。 例如,可以查找已有的开源项目或教程,了解如何生成paramsencSecKey。通常,这些参数是通过AES加密RSA公钥加密生成的,需要特定的密钥加密模式。在Python中,可以使用Crypto库来实现这些加密算法。 总结步骤: - 找到评论API的URL。 - 分析请求参数,特别是加密的部分。 - 用Python生成必要的加密参数。 - 发送POST请求,获取评论数据。 - 解析JSON,提取评论。 可能遇到的问题包括加密参数的正确生成,反爬虫机制如Cookies或User-Agent的检查。因此,需要设置合适的请求头,模拟浏览器行为。 现在,我需要将这些步骤转化为具体的代码示例,并解释每一步的作用。同时,注意用户要求使用requestsBeautifulSoup,但实际情况下可能主要使用requestsjson库,而BeautifulSoup可能用于其他部分,比如爬取歌曲ID,以构造评论API的请求参数。 例如,用户可能需要先爬取歌曲页面,获取歌曲ID,然后用这个ID去请求评论API。这时候,爬取歌曲页面可以使用BeautifulSoup来解析HTML,提取歌曲ID。然后再用requests发送API请求,处理加密参数,获取评论数据。 因此,示例代码可能分为两部分:使用BeautifulSoup获取歌曲ID,然后使用requests加密参数获取评论数据。这样既满足了用户使用这两个库的需求,又解决了评论数据获取的问题。 接下来,我需要编写示例代码,并确保参数生成部分正确。可能需要参考已有的方法,比如使用固定的公钥加密方式生成encSecKeyparams。 最后,提醒用户注意法律道德规范,遵守网站的robots.txt,以及频率限制,避免给服务器造成压力。</think>### 分步教程:使用Python爬取网易云音乐评论数据 网易云音乐的评论数据通过加密API接口返回,需构造加密参数。以下是具体步骤示例代码: --- #### **1. 分析API接口** 通过浏览器开发者工具(F12)分析评论请求,发现接口为: `https://music.163.com/weapi/comment/resource/comments/get?csrf_token=` 请求方式为`POST`,参数为加密的`params``encSecKey`[^2]。 --- #### **2. 生成加密参数** 加密逻辑基于AESRSA算法,需用Python模拟以下过程: - **AES加密**:将参数文本用`CBC模式`固定密钥加密。 - **RSA加密**:对AES密钥用公钥加密生成`encSecKey`。 ```python from Crypto.Cipher import AES from Crypto.Util.Padding import pad import binascii, codecs def generate_params(text): key = b'0CoJUm6Qyw8W8jud' iv = b'0102030405060708' cipher = AES.new(key, AES.MODE_CBC, iv) encrypted = cipher.encrypt(pad(text.encode(), AES.block_size)) params = codecs.encode(encrypted, 'base64').decode() # 第二次AES加密 key = b'FFFFFFFFFFFFFFFF' cipher = AES.new(key, AES.MODE_CBC, iv) final_params = codecs.encode(cipher.encrypt(pad(params.encode(), AES.block_size)), 'base64').decode() return final_params.strip() def generate_enc_seckey(): public_key = '010001' modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7' # 实际需生成随机16字节并RSA加密,此处简化为固定值 return '加密后的encSecKey' ``` --- #### **3. 发送请求并解析评论** ```python import requests import json def get_comments(song_id, page=1): url = 'https://music.163.com/weapi/comment/resource/comments/get?csrf_token=' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Referer': 'https://music.163.com/' } # 构造明文参数 text = json.dumps({ 'rid': f'R_SO_4_{song_id}', # 歌曲ID 'offset': (page-1)*20, 'limit': 20 }) data = { 'params': generate_params(text), 'encSecKey': generate_enc_seckey() } response = requests.post(url, headers=headers, data=data) if response.status_code == 200: comments = response.json().get('data', {}).get('comments', []) for comment in comments: print(f"用户:{comment['user']['nickname']} | 评论:{comment['content']}") else: print('请求失败') # 示例:爬取歌曲ID=1867213132的评论(第一页) get_comments(song_id='1867213132') ``` --- #### **4. 获取歌曲ID(使用BeautifulSoup)** 若需从歌单页提取歌曲ID,可使用BeautifulSoup解析HTML: ```python from bs4 import BeautifulSoup def get_song_ids(playlist_url): response = requests.get(playlist_url) soup = BeautifulSoup(response.text, 'html.parser') links = soup.select('a[href^="/song?id="]') song_ids = list(set(link['href'].split('=')[-1] for link in links)) return song_ids # 示例:爬取歌单中的歌曲ID song_ids = get_song_ids('https://music.163.com/playlist?id=123456') ``` --- #### **注意事项** 1. **加密参数**:实际需逆向JavaScript生成动态`encSecKey`,此处为简化示例。 2. **反爬机制**:需处理Cookie频率限制,避免IP被封。 3. **法律合规**:遵守网易云音乐的Robots协议及数据使用条款[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值