Python爬虫网易云音乐,Tkinter制作音乐播放器

这篇具有很好参考价值的文章主要介绍了Python爬虫网易云音乐,Tkinter制作音乐播放器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、效果展示

二、环境

三、实现过程

四、源码


一、效果展示

tkinter能不能放音乐,Python爬虫系统学习,1024程序员节,python

页面的美化以及功能还有待升级~

先来说一下已有功能吧:

  • 可以在搜索框中通过歌曲或歌手名称进行搜索,效果和在网易云官网搜索一样。

tkinter能不能放音乐,Python爬虫系统学习,1024程序员节,python

  • 点击开始下载,就会将搜索结果的第一条歌曲下载到指定文件夹

tkinter能不能放音乐,Python爬虫系统学习,1024程序员节,python

  • 下载完毕后,会遍历音乐目录,并将歌曲信息在窗口上刷新
  • 选中歌曲,然后点击播放,就会播放音乐

二、环境

使用语言:python3.7
开发工具:PyChram
第三方库:

  1. requests:获取网页数据
  2. execjs:执行js代码
  3. tkinter:图形用户界面
  4. tkinter.ttk:升级版的tkinter
  5. pygame:用来播放音乐

内置库:

  1. 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, headers=headers)
html_data = response.text


info_list = re.findall('<li><a 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_id

    chars = ['\\','/',':','*','?','"','<','>','|']
    for char in chars:
        music_name = music_name.replace(char, '_')

    # 图片、音频、视频都属于二进制数据
    music_data = requests.get(music_url, headers=headers).content
    with open(f'C:/Users\Administrator\Desktop\音乐播放器/{music_name}.mp3', mode='wb') as f:
        f.write(music_data)

我们先来看一下,歌曲是如何从网页上爬取出来的,

我们先来爬取飙升榜前Top100首歌曲

tkinter能不能放音乐,Python爬虫系统学习,1024程序员节,python文章来源地址https://www.toymoban.com/news/detail-760465.html

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_token=887ad1857d7e9c0e9640eecb1b5a96be'
    headers = {
        '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', mode='r', encoding='utf-8').read()
    ctx = execjs.compile(js)

    keyword = entry1.get()  # 获取单行文本框里的内容

    result = ctx.call('search', keyword)

    data = {
        'params': result['encText'],
        'encSecKey': result['encSecKey']
    }

    resp = requests.post(url=url, headers=headers, data=data)
    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, headers=headers).content
        with open(f'D:/music/{music_name}.mp3', mode='wb') as f:
            f.write(music_data)

    show_files()


# 将文件夹里的歌曲显示出来
def show_files():
    folder_path = r'D:/music'  # 指定文件夹路径

    # 获取文件夹中的所有文件名
    files = os.listdir(folder_path)

    # 清空树形菜单
    tree.delete(*tree.get_children())

    # 遍历文件名列表,将文件名添加到树形菜单中
    for i, file_name in enumerate(files):
        tree.insert("", index=END, text=i, values=(file_name))



def song_play():
    # 初始化pygame和mixer
    pygame.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 = f"D:/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') # 设置背景色
winw=560                              #窗口的宽度
winh=470                              #窗口的高度
scrw=win.winfo_screenwidth()            #屏幕的宽度
scrh=win.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(row=0,columnspan=2)

label1 = Label(win, text='输入歌曲、歌手:', font=('华文行楷', 20), background='#F4EFE7')
label1.grid(row=1, column=0,padx=10,pady=10)

entry1 = Entry(win, font=('隶书', 20))
entry1.grid(row=1, column=1,padx=10,pady=10)

var = StringVar()
var.set('163')
style = Style()
style.configure('TRadiobutton', font=('微软雅黑', 14), background='#F4EFE7')
radio1 = Radiobutton(win, text='网易云音乐', variable=var, value='163',style='TRadiobutton')
radio1.grid(row=2, column=0,padx=10,pady=10)
radio2 = Radiobutton(win, text='QQ音乐', variable=var, value='qq', style='TRadiobutton')
radio2.grid(row=2, column=1,padx=10,pady=10)

tree = Treeview(win, columns=("filename"))
tree.heading("#0", text="序号")
tree.heading("filename", text="文件名称")
tree.grid(row=3, columnspan=2,padx=10,pady=10)

# 定义按钮的样式
style.configure('TButton', font=('微软雅黑', 14), background='#F4EFE7', foreground='#000000', relief=RIDGE)
button1 = Button(win, text='开始下载', command=song_load, style='TButton')
button1.grid(row=4, column=0, padx=60, pady=10)

button2 = Button(win, text='播放', command=song_play, style='TButton')
button2.grid(row=4, column=1, padx=60, pady=10)


# button2 = Button(win, text='退出程序', command=win.quit)
# button2.grid(row=3, columnspan=2)


show_files()

win.mainloop()

到了这里,关于Python爬虫网易云音乐,Tkinter制作音乐播放器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python功能制作之简单的音乐播放器

    pip install PyQt5 双击列表歌曲即播放。 按住下面的暂停和播放【需要图标】【空格也可以】  

    2024年02月11日
    浏览(23)
  • uniapp 仿网易云音乐播放器 微信小程序

    uniapp 仿照网易云播放器功能

    2024年02月12日
    浏览(67)
  • Android Studio初学者实例:仿网易音乐播放器

    本期带来的是以Service为主要的知识点的网易音乐播放器 看一下效果图  首先项目准备: 在res下新建raw文件夹,并在文件夹中添加喜爱的mp3音乐  OK,第一步,先写一个背景文件,在res/drawable文件夹中新建xml文件: btn_bg_selector.xml  编写主界面代码activity_main.xml 编写MusicServic

    2024年02月05日
    浏览(33)
  • 使用Docker搭建YesPlayMusic网易云音乐播放器并发布至公网访问

    目录 ⛳️推荐 1. 安装Docker 2. 本地安装部署YesPlayMusic 3. 部署公有云YesPlayMusic播放器 3.1 安装cpolar内网穿透 3.2 固定YesPlayMusic公网地址 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 本篇文章讲解如何使用Docker搭建

    2024年03月23日
    浏览(35)
  • 如何搭建一个自己的音乐播放器-使用腾讯云轻量应用服务器搭建YesPlayMusic网易云播放器

    项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作为网易云官方应用的替代品。而且还拥有一些网易云官方应用没有的功能,比如可以自动签到,支持PWA可以直接一键安装,界面简洁美观,没有多余的社交功能,没有广告等特点。

    2023年04月23日
    浏览(39)
  • 如何使用Docker搭建YesPlayMusic网易云音乐播放器并发布至公网访问

    本篇文章讲解如何使用Docker搭建YesPlayMusic网易云音乐播放器,并且结合cpolar内网穿透实现公网访问音乐播放器。 YesPlayMusic是一款优秀的个人音乐播放器,可以通过Docker方式快速部署在本地服务器。它拥有美观的界面设计,可以绑定网易云音乐账号,实现歌曲收藏的同步。界面

    2024年02月20日
    浏览(24)
  • 用Python制作你的专属音乐播放器(此刻浪漫只属于你哦*´▽`*)

    昨天是博主的一位朋友生日,除了送上大大的红包,知道他喜欢听音乐,特意用代码给他写了一个 专属音乐播放器 ,今天把这个代码也开源送给所有粉丝哦。 我们常用的音乐播放器,比如酷狗,QQ音乐等里面的页面款式都是官方设定好的,使用者无法根据自己的需求更改,

    2024年01月15日
    浏览(34)
  • 基于Arduino Uno开发板制作音乐播放器

    1.Arduino开发板 Arduino Uno 是一款基于 Microchip ATmega328P 微控制器的开源微控制器板,由 Arduino.cc 开发,最初于 2010 年发布。该板配备了一组数字和模拟输入/输出 (I/O) 引脚,可以连接到各种扩展板(屏蔽)和其他电路。 该板具有 14 个数字 I/O 引脚(6 个能够进行 PWM 输出)、6 个

    2024年02月16日
    浏览(31)
  • 【单片机】电子音乐播放器的设计与制作(说明书)

    前   言          这是本人在大学期间的《单片机控制技术》课程中,所作的结课作业项目,而我也正想要一个电子音乐播放器,而且这样设计的音乐播放器可以发出宜人的音乐旋律,能给生活增加不少的乐趣,本次作业项目也就让我用51系列单片机设计这个电子音乐播放

    2024年02月06日
    浏览(28)
  • 基于STM32制作的音乐播放器,用PWM控制蜂鸣器

    目录 效果展示  前言         一、设计背景         1.1、知识储备          二、系统设计方案         2.1、实现功能          2.2、硬件部分         2.3、软件部分          三、软件设计          3.1、设计流程图          3.2、音乐频率的设置          3.3、编

    2024年02月03日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包