下载歌曲的时候嫌麻烦?打造专属你的音乐下载器
时间:2022-07-25
本文章向大家介绍下载歌曲的时候嫌麻烦?打造专属你的音乐下载器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
前面已经做出了一个只属于自己的音乐播放器,那怎么能没有一个音乐下载器呢
之前大家有没有过从电脑上下载歌曲MP3文件放到手机内存卡的经历,随着时代发展,现在的各大音乐软件已经成为播放器,下载音乐是要收费的,现在教大家从零开始可以通过python通过爬虫爬取音乐,教大家打造自己的音乐下载器。
知识点: 1.python基础知识 2.requests库 3.urllib库 4.BeautifulSoup
环境:
windows + pycharm + python3
适合零基础的同学
1、导入工具
import os
from urllib.request import urlretrieve
from tkinter import *
import requests
from selenium import webdriver
2、界面
# 创建界面
root = Tk()
# 标题
root.title('网易云音乐下载器')
# 设置窗口大小
root.geometry('560x450')
# 标签控件
label = Label(root,text='请输入歌曲名称:',font=('华文行楷',20))
# 标签定位
label.grid()
# 输入框
entry = Entry(root,font=('隶书',20))
entry.grid(row=0,column=1)
# 列表框
text = Listbox(root,font=('楷书',16),width=50,heigh=15)
text.grid(row=1,columnspan=2) # 横跨
# 开始按钮
button = Button(root,text='开始下载',font=('隶书',15),command=get_music_name) #command
button.grid(row=2,column=0,sticky=W) #sticky 对齐方式 W E N S
# 退出按钮
button1 = Button(root,text='退出程序',font=('隶书',15),command=root.quit) #command
button1.grid(row=2,column=1,sticky=E)
# 显示界面
root.mainloop()
运行代码,只得到一个界面
3、功能
爬取网易云音乐
# https://music.163.com/#/search/m/?s=%E7%9B%97%E5%B0%86%E8%A1%8C&type=1
# http://music.163.com/song/media/outer/url?id=574566207.mp3
headers = {
'Referer': 'https://music.163.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
下载歌曲
def song_load(item):
song_id = item['song_id']
song_name = item['song_name']
song_url = 'http://music.163.com/song/media/outer/url?id={}.mp3'.format(song_id)
# 创建文件夹
os.makedirs('music',exist_ok=True)
path = 'music{}.mp3'.format(song_name)
# 文本框
text.insert(END,'歌曲:{},正在下载...'.format(song_name))
# 文本框滚动
text.see(END)
# 更新
text.update()
# 下载
urlretrieve(song_url,path)
# 文本框
text.insert(END, '下载完毕:{},请试听...'.format(song_name))
# 文本框滚动
text.see(END)
# 更新
text.update()
搜索歌曲名称
def get_music_name():
name = entry.get()
url = 'https://music.163.com/#/search/m/?s={}&type=1'.format(name)
# 隐藏浏览器
option = webdriver.ChromeOptions()
option.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=option)
driver.get(url=url)
driver.switch_to.frame('g_iframe')
# 获取歌曲id
req = driver.find_element_by_id('m-search')
a_id = req.find_element_by_xpath('.//div[@class="item f-cb h-flag "]/div[2]//a').get_attribute("href")
print(a_id)
song_id = a_id.split('=')[-1]
print(song_id)
# 获取歌曲名
song_name = req.find_element_by_xpath('.//div[@class="item f-cb h-flag "]/div[2]//b').get_attribute("title")
print(song_name)
item = {}
item['song_id'] = song_id
item['song_name'] = song_name
driver.quit() # 退出浏览器
song_load(item)
最后运行代码,效果如下图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速学习-ElasticJob应用API
- 快速学习-ElasticJob-Lite Quick Start
- 快速学习-ElasticJob-Cloud Quick Start
- @JacksonInject与@JsonAlias注解-JSON框架Jackson精解第4篇
- 医疗NLP相关数据集整理
- 我们如何用 K8S 搞定 1000 个应用的测试环境
- 如何实现rsync多并发同步?
- 分享Linux内存占用几个案例
- 30个编程小技巧,提高代码性能
- OpenGL ES 3D 模型的加载和渲染
- FFmpeg 播放器视频渲染优化
- Istio中的流量配置
- Envoy 代理中的请求的生命周期
- Xilinx 7系列时钟结构
- 模拟入栈操作