海曙区网站开发培训,免费收录网站推广,做loge的网站,肇庆市端州发布目录
一、效果展示
二、环境
三、实现过程
四、源码 一、效果展示 页面的美化以及功能还有待升级~
先来说一下已有功能吧#xff1a;
可以在搜索框中通过歌曲或歌手名称进行搜索#xff0c;效果和在网易云官网搜索一样。 点击开始下载#xff0c;就会将搜索结果的第一…目录
一、效果展示
二、环境
三、实现过程
四、源码 一、效果展示 页面的美化以及功能还有待升级~
先来说一下已有功能吧
可以在搜索框中通过歌曲或歌手名称进行搜索效果和在网易云官网搜索一样。 点击开始下载就会将搜索结果的第一条歌曲下载到指定文件夹 下载完毕后会遍历音乐目录并将歌曲信息在窗口上刷新选中歌曲然后点击播放就会播放音乐
二、环境
使用语言python3.7 开发工具PyChram 第三方库
requests获取网页数据execjs执行js代码tkinter图形用户界面tkinter.ttk升级版的tkinterpygame用来播放音乐
内置库
os用于文件操作
三、实现过程
1.网易云音乐爬取
import requests
import re# 目标网址
url https://music.163.com/discover/toplist
# 伪装成浏览器
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
}# get请求
response requests.get(url, headersheaders)
html_data response.textinfo_list re.findall(lia href/song\?id(.*?)(.*?)/a/li, html_data)for info in info_list:music_id info[0]music_name info[1]music_url http://music.163.com/song/media/outer/url?id music_idchars [\\,/,:,*,?,,,,|]for char in chars:music_name music_name.replace(char, _)# 图片、音频、视频都属于二进制数据music_data requests.get(music_url, headersheaders).contentwith open(fC:/Users\Administrator\Desktop\音乐播放器/{music_name}.mp3, modewb) as f:f.write(music_data)
我们先来看一下歌曲是如何从网页上爬取出来的
我们先来爬取飙升榜前Top100首歌曲 2.网易云搜索音乐 3.下载 4.遍历文件夹到窗口 5.播放 四、源码
import requests
import execjs
import os
from tkinter import *
from tkinter.ttk import *import pygame
from tkinter import messagebox# 下载歌曲到文件夹
def song_load():url https://music.163.com/weapi/cloudsearch/get/web?csrf_token887ad1857d7e9c0e9640eecb1b5a96beheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36}js open(music163.js, moder, encodingutf-8).read()ctx execjs.compile(js)keyword entry1.get() # 获取单行文本框里的内容result ctx.call(search, keyword)data {params: result[encText],encSecKey: result[encSecKey]}resp requests.post(urlurl, headersheaders, datadata)json_data resp.json()songs json_data[result][songs]if songs:song songs[0] # 获取第一首匹配到的歌曲music_name song[name]music_id song[id]music_url http://music.163.com/song/media/outer/url?id str(music_id)chars [\\, /, :, *, ?, , , , |]for char in chars:music_name music_name.replace(char, _)# 图片、音频、视频都属于二进制数据music_data requests.get(music_url, headersheaders).contentwith open(fD:/music/{music_name}.mp3, modewb) as f:f.write(music_data)show_files()# 将文件夹里的歌曲显示出来
def show_files():folder_path rD:/music # 指定文件夹路径# 获取文件夹中的所有文件名files os.listdir(folder_path)# 清空树形菜单tree.delete(*tree.get_children())# 遍历文件名列表将文件名添加到树形菜单中for i, file_name in enumerate(files):tree.insert(, indexEND, texti, values(file_name))def song_play():# 初始化pygame和mixerpygame.init()pygame.mixer.init()# 检查是否选择了要播放的歌曲selected_item tree.focus()if not selected_item:messagebox.showinfo(提示, 请先选择要播放的歌曲)return# 获取选中的歌曲文件名selected_song tree.item(selected_item, values)[0]song_path fD:/music/{selected_song}try:# 使用播放器播放音乐文件pygame.mixer.music.load(song_path)pygame.mixer.music.play()# messagebox.showinfo(提示, 正在播放音乐)except pygame.error as e:messagebox.showinfo(错误, str(e))win Tk()
win.title(音乐听) # 设置窗口标题
win.configure(bg#F4EFE7) # 设置背景色
winw560 #窗口的宽度
winh470 #窗口的高度
scrwwin.winfo_screenwidth() #屏幕的宽度
scrhwin.winfo_screenheight() #屏幕的高度
x(scrw-winw)/2 #窗口的水平位置
y(scrh-winh)/2 #窗口的垂直位置
win.geometry(%dx%d%d%d %(winw,winh,x,y)) #设置窗口位置title_label Label(win, text音乐听, font(华文行楷, 36, bold), background#F4EFE7)
title_label.grid(row0,columnspan2)label1 Label(win, text输入歌曲、歌手:, font(华文行楷, 20), background#F4EFE7)
label1.grid(row1, column0,padx10,pady10)entry1 Entry(win, font(隶书, 20))
entry1.grid(row1, column1,padx10,pady10)var StringVar()
var.set(163)
style Style()
style.configure(TRadiobutton, font(微软雅黑, 14), background#F4EFE7)
radio1 Radiobutton(win, text网易云音乐, variablevar, value163,styleTRadiobutton)
radio1.grid(row2, column0,padx10,pady10)
radio2 Radiobutton(win, textQQ音乐, variablevar, valueqq, styleTRadiobutton)
radio2.grid(row2, column1,padx10,pady10)tree Treeview(win, columns(filename))
tree.heading(#0, text序号)
tree.heading(filename, text文件名称)
tree.grid(row3, columnspan2,padx10,pady10)# 定义按钮的样式
style.configure(TButton, font(微软雅黑, 14), background#F4EFE7, foreground#000000, reliefRIDGE)
button1 Button(win, text开始下载, commandsong_load, styleTButton)
button1.grid(row4, column0, padx60, pady10)button2 Button(win, text播放, commandsong_play, styleTButton)
button2.grid(row4, column1, padx60, pady10)# button2 Button(win, text退出程序, commandwin.quit)
# button2.grid(row3, columnspan2)show_files()win.mainloop()