现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器
时间:2022-07-25
本文章向大家介绍现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
之前大家有没有过从电脑上下载歌曲MP3文件放到手机内存卡的经历,随着时代发展,现在的各大音乐软件已经成为播放器,下载音乐是要收费的,现在教大家从零开始可以通过python通过爬虫爬取音乐,教大家打造自己的音乐下载器
知识点:
- python基础知识
- requests库
- urllib库
- BeautifulSoup
环境:
- windows
- pycharm
- python3
先看效果图
代码
导入工具
import os
from urllib.request import urlretrieve
from tkinter import *
import requests
import json
import jsonpath
from selenium import webdriver
下载歌曲
def song_load(song_url,song_title):
# 创建文件夹
os.makedirs('music', exist_ok=True)
path = 'music{}.mp3'.format(song_title)
text.insert(END, '歌曲:{},正在下载...'.format(song_title))
# 文本框滚动
text.see(END)
# 更新
text.update()
urlretrieve(song_url, path)
text.insert(END, '下载完毕:{},请试听'.format(song_title))
# 文本框滚动
text.see(END)
# 更新
text.update()
搜索歌曲的id 名字
def get_music_name():
# 获取输入框的歌曲名称
name = entry.get()
platform = var.get()
headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
# 'Referer': 'http://music.onlychen.cn/?name=%E4%BB%A5%E7%88%B6%E4%B9%8B%E5%90%8D&type=qq',
# 'Origin': 'http://music.onlychen.cn',
# 'Host': 'music.onlychen.cn',
# 'Cookie': 'UM_distinctid=173e1b3fd7f683-018ad69a1b7ba2-3c634103-1fa400-173e1b3fd8084b; CNZZDATA1279162877=486742487-1597218425-null%7C1597462873',
'X-Requested-With': 'XMLHttpRequest',
}
params = {
'input': name,
'filter': 'name',
'type': platform, # netease 网易云
'page': '1',
}
# 拼接url
url = 'http://music.onlychen.cn/'
resp = requests.post(url,data=params,headers=headers)
data = resp.json()
print(data)
title = jsonpath.jsonpath(data,"$..title")[0]
author = jsonpath.jsonpath(data,"$..author")[0]
url = jsonpath.jsonpath(data,"$..url")[0]
print(title)
print(author)
print(url)
# 下载歌曲
song_load(url,title)
搭建界面
# 1.创建画布
root = Tk()
# 2.添加标题
root.title('全网音乐下载器')
# 3.设置窗口大小
root.geometry('560x450+400+200')
# 4.标签控件
label = Label(root, text='请输入下载的歌曲:', font=('华文行楷', 20))
# 5.定位
label.grid()
# 6.输入框
entry = Entry(root, font=('隶书', 20))
# 7.定位
entry.grid(row=0, column=1)
# 单选按钮***
var = StringVar()
r1 = Radiobutton(root,text="网易云",variable=var,value='netease')
r1.grid(row=2, column=0)
r2 = Radiobutton(root,text="qq",variable=var,value='qq')
r2.grid(row=2, column=1)
# 8.列表框
text = Listbox(root, font=('楷书', 16), width=50, heigh=15)
# 9.定位 columnspan 组件横跨的列数
text.grid(row=3, columnspan=2)
# 点击下载按钮
button = Button(root, text='开始下载', font=('隶书', 15), command=get_music_name)
# 定位 sticky 对齐方式 W E N S 东南西北
button.grid(row=4, column=0, sticky=W)
# 退出程序的按钮
button1 = Button(root, text='退出程序', font=('隶书', 15), command=root.quit)
# 定位 sticky 对齐方式 W E N S 东南西北
button1.grid(row=4, column=1, sticky=E)
# 显示界面
root.mainloop()
- (1024程序员节快乐)阿里祭出大器,Java代码检查插件
- Java多线程神器:join使用及原理
- SpringCloud配置中心内容加密
- Spring Boot日志集成
- MongoDB系列7:MongoDB存储引擎
- MongoDB系列6:MongoDB索引的介绍
- 文本数据处理的终极指南-[NLP入门]
- 神经网络思想建立LR模型(DL公开课第二周答案)
- 如何用卷积神经网络从歌曲中提取纯人声?这里有教程+代码
- 排序算法对比、总结(Python代码)
- 记一道未能答出的算法面试题
- 关于numpy mean函数的axis参数
- 在Keras+TF环境中,用迁移学习和微调做专属图像识别系统
- Tensorflow的LRN是怎么做的
- 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 数组属性和方法
- App为什么会crash?一篇文章带你探究根本原因 ,事情没有你想得那么简单!
- MySQL 8.0新特性 — 用户管理
- Java15的新特性
- ZooKeeper到底为Kafka的做了什么牺牲?
- Flutter原理:三棵重要的树(渲染过程、布局约束、应用视图的构建等)
- FlutterDojo设计之道—状态管理之路(六)
- Day9.函数进阶
- 关于requests.exceptions.SSLError: HTTPSConnectionPool
- Day10.高阶函数介绍
- python提示警告InsecureRequestWarning
- Day11.类和对象这回事儿
- Day12.魔法方法&方法重写
- Linux基础第一课——基础知识了解
- 【Vue CLI】手把手教你撸插件
- Linux基础第二课——系统架构