首页 > 编程语言 >使用python下载某易云歌曲

使用python下载某易云歌曲

时间:2023-06-21 14:35:36浏览次数:48  
标签:singer name python url music path 歌曲 某易云 id

1、某易云的外链地址:

url = 'http://music.163.com/song/media/outer/url?id=' + 歌曲的id值 + '.mp3'

 如:http://music.163.com/song/media/outer/url?id=1974443814.mp3

2、通过歌曲id下载:

import requests
import os
import bs4
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'
}
# 创建保存音乐的文件夹
path = os.path.join('H:/网易云音乐下载/')
if not os.path.exists(path):
    os.mkdir(path)
# 输入音乐id
id = input('请输入歌曲Id:')
# 实现无可视化界面(固定写法)
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 初始化browser对象
service = Service(executable_path=r'E:\software\chromedriver_win32.exe')
browser = webdriver.Chrome(service=service, options=chrome_options)


# 获取音乐的id、名字,歌手名
def get_id_name_singer(url):
    browser.get(url=url)
    browser.switch_to.frame('g_iframe')
    sleep(3)
    page_text = browser.execute_script("return document.documentElement.outerHTML")
    soup = bs4.BeautifulSoup(page_text, 'html.parser')
    music_ids = soup.select("div[class='td w0'] a")  # 音乐id
    music_id = music_ids[0].get("href")
    music_id = music_id.split('=')[-1]
    music_names = soup.select("div[class='td w0'] a b")  # 音乐名字
    music_name = music_names[0].get("title")
    music_singers = soup.select("div[class='td w1'] a")  # 歌手名
    music_singer = music_singers[0].string
    return music_id, music_name, music_singer


# 下载音乐
def download_music(url, song_name, singer):
    response = requests.get(url=url, headers=headers)
    music_data = response.content
    music_path_name = '{}_{}.mp3'.format(song_name, singer)
    music_path = path + music_path_name
    with open(music_path, 'wb') as f:
        f.write(music_data)
        print(music_path_name, '下载成功')


# 主函数
def main():
    music_name = input('请输入歌曲名称:')
    music_singer = input('请输入歌手名称:')
    music_url = 'http://music.163.com/song/media/outer/url?id=' + id + '.mp3'
    download_music(music_url, music_name, music_singer)


if __name__ == '__main__':
    main()
    browser.quit()

3、通过歌词名称下载:

歌曲搜索的页面地址:https://music.163.com/#/search/m/?id=1974443814&s=歌曲名称&type=1

具体代码实现:

import requests
import os
import bs4
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'
}
# 创建保存音乐的文件夹
path = os.path.join('H:/网易云音乐下载/')
if not os.path.exists(path):
    os.mkdir(path)
# 输入音乐名
name = input('请输入歌名:')# 实现无可视化界面(固定写法)
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 初始化browser对象
service = Service(executable_path=r'E:\software\chromedriver_win32.exe')
browser = webdriver.Chrome(service=service, options=chrome_options)


# 获取音乐的id、名字,歌手名
def get_id_name_singer(url):
    browser.get(url=url)
    browser.switch_to.frame('g_iframe')
    sleep(3)
    page_text = browser.execute_script("return document.documentElement.outerHTML")
    soup = bs4.BeautifulSoup(page_text, 'html.parser')
    music_ids = soup.select("div[class='td w0'] a")  # 音乐id
    music_id = music_ids[0].get("href")
    music_id = music_id.split('=')[-1]
    music_names = soup.select("div[class='td w0'] a b")  # 音乐名字
    music_name = music_names[0].get("title")
    music_singers = soup.select("div[class='td w1'] a")  # 歌手名
    music_singer = music_singers[0].string
    return music_id, music_name, music_singer


# 下载音乐
def download_music(url, song_name, singer):
    response = requests.get(url=url, headers=headers)
    music_data = response.content
    music_path_name = '{}_{}.mp3'.format(song_name, singer)
    music_path = path + music_path_name
    with open(music_path, 'wb') as f:
        f.write(music_data)
        print(music_path_name, '下载成功')


# 主函数
def main():
    if name:
        url = 'https://music.163.com/#/search/m/?s=' + name + '&type=1'
        music_id, music_name, music_singer = get_id_name_singer(url)
        music_url = 'http://music.163.com/song/media/outer/url?id=' + music_id + '.mp3'
        download_music(music_url, music_name, music_singer)if __name__ == '__main__':
    main()
    browser.quit()

 注:

chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html

标签:singer,name,python,url,music,path,歌曲,某易云,id
From: https://www.cnblogs.com/zaijin-yang/p/17496124.html

相关文章

  • python请求有关ja3指纹问题
    遇见一个网站采集,无论怎样都返回空数据(实际上是有数据的),但是抓包下来又确实是那样的,请教了一些人推测是指纹验证,拜读了网上其他大佬的博客文章后实验了一下,发现确实是这个问题!第一次知道tcp还有这个东西,让我大受震撼,值此搬运一下。参考链接及来源:Python爬虫进阶必备|JA3指......
  • python.制图.饼状图
    1defsendMsgtemplate_card(fail,passnum,casename,casetime,path):importpandasaspdimportmatplotlib.pyplotasplt#将测试结果转换为数值类型data1={'errors':'0','failures':fail,'skipped':'1'......
  • Ubuntu安装管理不同版本的python
    ubuntu多个版本安装背景:本地环境Ubuntu22.0464-bit,默认安装python3.10.6,未安装pip,venv需求:安装python3.8,并安装两版本对应pip,venv1增加PPA软件源deadsnakessudoaptinstallsoftware-properties-commonsudoadd-apt-repositoryppa:deadsnakes/ppa2跟新系统的......
  • 通用密钥,无需密码,在无密码元年实现Passkeys通用密钥登录(基于Django4.2/Python3.10)
    毋庸讳言,密码是极其伟大的发明,但拜病毒和黑客所赐,一旦密码泄露,我们就得绞尽脑汁再想另外一个密码,但记忆力并不是一个靠谱的东西,一旦遗忘密码,也会造成严重的后果,2023年业界巨头Google已经率先支持了Passkeys登录方式,只须在设备上利用PIN码解锁、指纹或面部辨识等生物识别方式,即可验......
  • PostgreSQL 通过python 监控逻辑复制
    上期是讲逻辑复制,本期是通过PYTHON来对逻辑复制中的配置参数,publication定义,打印不适合进行逻辑复制的表,打印没有在使用的复制槽,另外包含当前发布端和接收端两边的LSN对比。以下是代码,对于逻辑复制中主要的监控点有1 是不是存在复制槽不使用的情况2 是不是存在主库和从库之......
  • 十五、python文件IO操作
    十五、python文件IO操作python文件操作的步骤python文件的操作就三个步骤:1.先open打开一个要操作的文件2.操作此文件(读,写,追加等)3.close关闭此文件python文件访问模式简单格式:file_object=open(file_path,mode="")mode:r只读模式,不能写(文件必须存在,不存在会......
  • Python 修改ha配置文件
    Python修改ha配置文件任务要求1、用户输入字符串{"backend":"test.oldboy.org","record":{"server":"100.1.7.9","weight":20,"maxconn":30}}2、在对应的backend下,添加一条新记录backend不存在时,创建3、删除一条记录ba......
  • Porting Code to Python 3 with 2to3
    参考https://www.cmi.ac.in/~madhavan/courses/prog2-2012/docs/diveintopython3/porting-code-to-python-3-with-2to3.html......
  • 根据ubuntu:20.04制作python环境docker镜像
    因为有个算法是python写的,要在服务器上调用,之前是直接根据jdk镜像制作的环境,现在要装python,jdk双环境,只能自己制作一个镜像出来了,命令如下FROMubuntu:20.04ENVTZ=Asia/ShanghaiENVLANGC.UTF-8RUNmv/etc/apt/sources.list/etc/apt/sources.list.bakCOPYsources.li......
  • 【python基础】类-类属性
    在初始类中,我们介绍了如何访问类属性,除了访问类属性外还有其他操作类属性的情况,我们将在这里做详细介绍:1.给类属性指定默认值类中的每个属性都必须有初始值,哪怕这个值是0或者空字符串。在有些情况下,如设置默认值时,在方法__init__方法内指定这种初始值是可行的,如果对某个属性这样......