如何基于Python批量下载音乐

yizhihongxing

基于Python批量下载音乐可以分为以下几个步骤:

步骤一:确定下载源和下载目录

首先,要确认所需要下载的音乐源,比如 https://music.163.com/ 。然后,要确定下载的目录。

步骤二:获取音乐详情

通过分析音乐信息,可以获取歌曲ID,歌曲名称,歌手等信息。比如可以使用Python的requests和BeautifulSoup库对网页进行解析来获取音乐详情

import requests
from bs4 import BeautifulSoup

url = 'https://music.163.com/playlist?id=5211200197'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')
music_lists = soup.find_all('ul', {'class': 'f-hide'})[0]
musics = music_lists.find_all('a')
for music in musics:
    print(music['href'], music.text)

步骤三:下载音乐文件

获取从步骤二中解析出的音乐ID和下载目录,然后构建出音乐文件的下载链接,使用Python的requests库下载音乐文件并保存到指定目录中。下面是具体的代码片段:

def download_music_music163(_music_id, _path):
    """
    :param _music_id: 歌曲id
    :param _path: 保存路径
    """
    music_src = f"https://music.163.com/song/media/outer/url?id={_music_id}.mp3"

    try:
        r = requests.get(music_src, stream=True)
        content_size = int(r.headers['content-length'])
    except Exception as e:
        print('【错误】当前音乐无法下载')
        return

    if os.path.exists(_path):
        if not check_file_already_exists(_path, content_size):
            os.remove(_path)
        else:
            return
    download_file_count = 0
    while download_file_count < 3:
        try:
            with open(_path, "wb") as f:
                for chunk in r.iter_content(1024):
                    f.write(chunk)
                    download_size = os.path.getsize(_path)
                    if download_size >= content_size:
                        break
                download_file_count += 1
        except Exception as e:
            download_file_count += 1

    if download_file_count == 3:
        print('【错误】这个音乐文件下载失败了...')
    else:
        print(_path, '下载成功')

示例说明

下面给出两个简单的示例,分别是下载流行歌曲榜(周榜)的前五首歌曲以及下载网易云音乐热门歌单中的音乐。

示例1:下载流行歌曲榜的前五首歌曲

import requests
from bs4 import BeautifulSoup
import os

def download_music_music163(_music_id, _path):
    # 与前面的代码一致
    pass

url = 'https://music.163.com/discover/toplist?id=3778678'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')
music_lists = soup.find_all('ul', {'class': 'f-hide'})[0]
musics = music_lists.find_all('a')

top_n = 5 # 需要下载的歌曲数,可以自己设置
download_count = 0 # 已经下载的歌曲数

for music in musics:
    if download_count == top_n:
        break
    music_id = music['href'].split('=')[1]
    music_name = music.text
    download_path = os.path.join(os.getcwd(), f'{music_name}.mp3')
    download_music_music163(music_id, download_path)
    download_count += 1

示例2:下载网易云音乐热门歌单中的音乐

import requests
from bs4 import BeautifulSoup
import os

def download_music_music163(_music_id, _path):
    # 与前面的代码一致
    pass

url = 'https://music.163.com/playlist?id=2884035'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')
music_lists = soup.find_all('ul', {'class': 'f-hide'})[0]
musics = music_lists.find_all('a')

for music in musics:
    music_id = music['href'].split('=')[1]
    music_name = music.text
    download_path = os.path.join(os.getcwd(), f'{music_name}.mp3')
    download_music_music163(music_id, download_path)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何基于Python批量下载音乐 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Ajax配合Spring实现文件上传功能代码

    为了实现Ajax配合Spring实现文件上传功能,我们需要按照以下步骤进行操作: 1.前端代码 首先,在前端页面代码中,我们需要创建一个上传文件的表单和一个用来显示上传进度的进度条,代码示例如下: <form id="upload" enctype="multipart/form-data"> <in…

    jquery 2023年5月27日
    00
  • 基于JQuery的多标签实现代码

    基于jQuery的多标签实现是一种非常流行的前端开发技术。以下是基于jQuery实现多标签的完整攻略。 步骤一:HTML结构 首先,在HTML文件中需要创建一些标签用于存放标签页的内容,例如: <div class="tabs"> <ul class="tab-links"> <li cl…

    jquery 2023年5月27日
    00
  • jQuery mouseenter()方法

    jQuery mouseenter()方法用于在鼠标进入元素时触发事件。与mouseover()方法不同,mouseenter()方法不会在鼠标移动到元素的子元素上时触事件。 以下是mouseenter()的详细攻略: 语法 $(selector).mouseenter(function) 参数 selector:必需,用于选择要绑定事件的元素。 funct…

    jquery 2023年5月9日
    00
  • jQuery鼠标事件总结

    jQuery鼠标事件总结 jQuery提供了一系列的鼠标事件,包括click、dbclick、mouseover、mouseout、mousedown、mouseup、mousemove等等。下面对这些鼠标事件进行总结。 click事件 click事件在用户单击页面元素时触发。可以通过以下代码绑定click事件: $(selector).click(func…

    jquery 2023年5月28日
    00
  • jQuery+datatables插件实现ajax加载数据与增删改查功能示例

    为了更好地让您了解“jQuery+datatables插件实现ajax加载数据与增删改查功能”的完整攻略,我将会按一定的顺序进行讲解。 1. 简介 首先,了解一下相关工具的情况。jQuery 是一套非常流行的 JavaScript 库,相信大家都比较熟悉了,它的特点是使用十分方便快捷。Datatables 是一个非常方便的表格插件,它可以实现较复杂的表格功能…

    jquery 2023年5月28日
    00
  • jQWidgets jqxCheckBox enableContainerClick属性

    jQWidgets 是一个流行的 JavaScript UI 库,提供了许多可定制的 UI 组件。其中一个组件是 jqxCheckBox,它是用于创建复选框件。jqxCheckBox供多个属性,其中之一是 enableContainerClick 属性。下面是关于 jqxCheckBox 的 enableContainerClick 属性的详细攻略: ena…

    jquery 2023年5月11日
    00
  • jQuery实现高度灵活的表单验证功能示例【无UI】

    来讲解一下关于“jQuery实现高度灵活的表单验证功能示例【无UI】”的完整攻略。 简要概述 “jQuery实现高度灵活的表单验证功能示例【无UI】”是一篇介绍如何使用jQuery实现表单验证功能的文章。该文中通过代码示例逐步讲解如何使用jQuery对表单进行各种类型的验证,如必填项、长度限制、正则表达式等。 环境准备 在进行表单验证前,需要准备好以下两个文…

    jquery 2023年5月28日
    00
  • jquery UI Datepicker时间控件冲突问题解决

    当我们在使用jquery UI的datepicker插件时,可能会遇到一些时间控件冲突问题。这些问题导致了日期选择器无法正常工作,甚至导致整个页面无法正确加载。本文将提供一些解决方案来解决这些问题。 1. 问题描述 在使用jquery UI的datepicker插件时,您可能会遇到以下问题之一: 日期选择器无法打开 日期选择器显示异常 页面无法正确加载 2.…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部