使用Python从酷狗音乐网站下载音乐

本文介绍了一个使用Python的requests库和哈希算法,从酷狗音乐网站搜索并下载歌曲的程序。程序允许用户输入歌曲名,显示搜索结果,选择歌曲下载。使用时需注意遵守法律法规和网站条款。

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

当然可以!以下是你的博客文章的Markdown格式:


使用Python从酷狗音乐网站下载音乐

!!!本程序仅供学习参考

1. 程序介绍

这个程序使用了Python的requests库,以及一些哈希算法来实现从酷狗音乐网站搜索歌曲并下载的功能。下面是它的主要功能:

  • 从酷狗音乐网站搜索歌曲
  • 展示搜索结果列表
  • 选择并下载指定的歌曲

2. 代码实现

# 代码实现部分,包括get_signature、get_list、show_list、save_music等函数的实现

import json
import time
from hashlib import md5

import requests


def get_signature(text):
    new_md5 = md5()
    new_md5.update(text.encode(encoding='utf-8'))
    signature = new_md5.hexdigest()
    return signature


def get_list(keyword):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47'
    }
    mid = 'ccc842dce7da774774ce9278c0591119'
    url = 'https://complexsearch.kugou.com/v2/search/song?callback=callback123&srcappid=2919&clientver=1000&clienttime={time}&mid={mid}&uuid={mid}&dfid=0R7g5f2OX6eY2EBfN92rrRN0&keyword={keyword}&page=1&pagesize=30&bitrate=0&isfuzzy=0&inputtype=0&platform=WebFilter&userid=0&iscorrection=1&privilege_filter=0&filter=10&token=&appid=1014&signature={signature}'
    key_code = 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwtappid=1014bitrate=0callback=callback123clienttime={time}clientver=1000dfid=0R7g5f2OX6eY2EBfN92rrRN0filter=10inputtype=0iscorrection=1isfuzzy=0keyword={keyword}mid={mid}page=1pagesize=30platform=WebFilterprivilege_filter=0srcappid=2919token=userid=0uuid={mid}NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt'
    millis = str(round(time.time() * 1000))
    p = key_code.format(time=millis, mid=mid, keyword=keyword)
    signature = get_signature(p)
    search_url = url.format(keyword=keyword, time=millis, signature=signature, mid=mid)
    # print(search_url)
    list_res = requests.get(search_url, headers=headers)
    return list_res


def show_list(song_list):
    for i, song in enumerate(song_list):
        print(f'{i + 1}---{song.get("SongName")}---{song.get("EMixSongID")}')


def save_music(num, song_list):
    info_url = f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&encode_album_audio_id={song_list[int(num) - 1].get("EMixSongID")}'
    headers2 = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47',
        'Cookie': 'kg_mid=ccc842dce7da774774ce9278c0591119; kg_dfid=0R7g5f2OX6eY2EBfN92rrRN0; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1696760245; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1696762195'
    }
    info_res = requests.get(info_url, headers=headers2)
    m_url = info_res.json()['data']['play_url']
    m_res = requests.get(m_url, headers=headers2)
    with open('test.mp3', 'wb') as f:
        f.write(m_res.content)


if __name__ == "__main__":
    keyword = input('请输入歌曲名称\n')
    list_res = get_list(keyword)
    song_list = json.loads(list_res.text[12:-2])['data']['lists']
    show_list(song_list)
    num = input('请输入下载第几首\n')
    save_music(num, song_list)


3. 如何使用

要使用这个程序,你只需要运行它,并输入你想要下载的歌曲名称。程序将会展示搜索结果列表,然后你可以输入要下载的歌曲序号,程序会自动下载并保存音乐文件。

4. 注意事项

需要注意的是,网站的数据获取和下载行为需要遵守相关的法律法规和网站的使用条款。请在合法的范围内使用这个程序。

### 使用Python酷狗音乐平台下载音乐 为了实现从酷狗音乐平台下载音乐的功能,可以按照如下方法构建程序。此过程涉及使用`requests`库发送HTTP请求获取页面数据以及利用正则表达式或其他解析工具来处理返回的数据。 #### 安装必要的包 首先安装所需的第三方库,可以通过pip命令完成这些操作: ```bash pip install requests beautifulsoup4 selenium webdriver_manager ``` #### 设置环境与导入模块 准备阶段需要引入相应的Python模块,并配置好Webdriver以便后续自动化控制浏览器访问目标站点。 ```python from selenium import webdriver from bs4 import BeautifulSoup import re import os from urllib.parse import quote_plus as urlencode from webdriver_manager.chrome import ChromeDriverManager ``` #### 构建函数用于搜索歌曲并提供下载链接 定义一个名为`search_song_and_download`的函数接收用户输入作为参数,在线查找匹配项并将结果呈现给使用者选择具体哪一首歌进行下一步动作。 ```python def search_song_and_download(song_name): driver = webdriver.Chrome(ChromeDriverManager().install()) try: encoded_query = urlencode(song_name.encode('gbk')) url = f"https://www.kugou.com/yy/html/search.html#searchType=song&searchKeyWord={encoded_query}" driver.get(url) soup = BeautifulSoup(driver.page_source, 'html.parser') items = soup.find_all('li', class_='item') songs_list = [] for idx, item in enumerate(items[:10], start=1): # 只显示前十个结果供选择 title_tag = item.select_one('.songname .pc_temp_songname a').get_text(strip=True) singer = item.select_one('.singer a').get_text(strip=True).strip() hash_value = re.search(r'data\-hash="(.*?)"', str(item)).group(1) print(f"{idx}. {title_tag} - {singer}") songs_list.append((title_tag, singer, hash_value)) choice = int(input("\n请输入您要下载的歌曲编号:")) - 1 selected_title, _, song_hash = songs_list[choice] download_url = get_direct_download_link(song_hash) save_music_file(download_url, selected_title) finally: driver.quit() def get_direct_download_link(hash_code): api_endpoint = "https://wwwapi.kugou.com/yy/index.php" params = { 'r': 'play/getdata', 'hash': hash_code, 'album_id': '', 'dfid': '' } response = requests.post(api_endpoint, data=params) json_data = response.json() return json_data['data']['play_url'] def save_music_file(file_url, filename): music_dir = './music/' if not os.path.exists(music_dir): os.makedirs(music_dir) file_path = os.path.join(music_dir, f'{filename}.mp3'.replace("/", "-").replace("\\", "-")) with open(file_path, 'wb') as file: file.write(requests.get(file_url).content) print(f"\n已成功保存至{file_path}") if __name__ == '__main__': keyword = input("请输入你想下载的歌曲名:") search_song_and_download(keyword)[^3] ``` 上述代码实现了基本功能框架,实际应用时可能还需要考虑异常情况下的错误处理机制等问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0zxm

祝大家天天开心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值