Python:通过网络爬虫实现一个简易控制台音乐播放器

hello,大家好,我是wangzirui32,今天我们来学习如何通过网络爬虫实现一个简易控制台音乐播放器,开始学习吧!

  1. 项目结构及库准备

Python:通过网络爬虫实现一个简易控制台音乐播放器
本项目使用的第三方库安装命令:
pip install tinydb pygame requests
  1. 入口程序 app.py

app.py代码如下:

from download import download
from play import play_all_music
from tinydb import TinyDB

print("欢迎来到控制台音乐播放程序!")
db = TinyDB("music.json")

def start():
    print(30*"-")
    print("1. 播放歌单")
    print("2. 新增乐曲")
    print("3. 帮助")
    print("4. 退出")

    operation = input("请选择你的操作(输入序号):")

    if operation == "1":
        play_all_music(db)
    elif operation == "2":
        download(db)
    elif operation == "3":
        help_text = """
本系统可以帮助您在控制台中播放音乐
音乐来自酷我音乐官网
启动系统,可以选择自己的操作
播放乐曲时,可以按 Ctrl+C 跳过该乐曲
"""
        print(help_text)
    elif operation == "4":
        db.close()
        exit()

    start()

start()
  1. 下载音乐文件

3.1 抓包分析

这里以酷狗音乐作为抓取对象,打开一个歌曲的页面,同时打开网络请求分析器,再点开 Fetch/XHR,经过排查,发现了乐曲文件的URL信息:

Python:通过网络爬虫实现一个简易控制台音乐播放器
经过测试可以发现,URL地址确实指向了乐曲文件。

; 3.2 download.py

download.py文件代码如下:

from requests import get

def download(db):
    music_id = input("请输入乐曲ID:")
    music_name = input("请输入乐曲名称:")
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36 Edg/100.0.1185.29"
    }

    url = "http://www.kuwo.cn/api/v1/www/music/playUrl"
    params = {
        "mid": music_id,
        "type": "music",
        "httpsStatus": "1"
    }
    data = get(url, params=params, headers=headers).json()
    music_url = data['data']['url']
    filename = f"music/{music_id}.mp3"

    with open(filename, "wb") as f:
        f.write(get(music_url).content)

    print("下载完成!正在加入歌单......")

    table = db.table("music")

    table.insert({"music_name": music_name, "music_id": music_id})
    print("加入完成!")
  1. 播放音乐 play.py

play.py代码如下:

import pygame
import time

def play(filename):
    track = pygame.mixer.music.load(filename)
    pygame.mixer.music.play()
    pygame.mixer.music.set_volume(1.0)

    time_list = []
    while True:
        """此处循环代码解释看下文"""
        now = pygame.mixer.music.get_pos()
        if not now in time_list:
            time_list.append(now)
        else:
            break
        time.sleep(1)

    pygame.mixer.music.stop()

def play_all_music(db):
    table = db.table("music")
    all_music = table.all()

    print("歌单:")
    print("-"*30)
    for i in all_music:
        print(i.get('music_name'))
    print("-"*30)

    pygame.init()
    pygame.mixer.init()
    print("播放器就绪......")
    print("-"*30)

    for i in all_music:
        print("开始播放 {} ".format(i.get('music_name')))
        try:
            play("music/{}.mp3".format(i.get("music_id")))
        except KeyboardInterrupt:
            continue

    pygame.mixer.music.stop()

以上便封装了音乐播放的功能。关于代码中 while True那一段的解释如下:
知周所众(众所周知), pygame模块中的音乐播放函数 pygame.mixer.music.play()存在一个问题:不用 time.sleep停止程序的话,乐曲不会播放。但乐曲总得放完啊,于是每间隔1秒,获取歌曲播放到的位置( pygame.mixer.music.get_pos()),如果乐曲有1秒进度停滞了,那就是播放完毕了,随后调用 pygame.mixer.music.stop()停止播放。

  1. 效果展示

输入乐曲信息:

Python:通过网络爬虫实现一个简易控制台音乐播放器
可以播放歌单:
Python:通过网络爬虫实现一个简易控制台音乐播放器

好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!

Original: https://blog.csdn.net/wangzirui32/article/details/123970788
Author: wangzirui32
Title: Python:通过网络爬虫实现一个简易控制台音乐播放器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779239/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球