python苦短-爬取音乐

2020-09-15 15:52:25 浏览数 (1)

python苦短-下载音乐

概述

使用到的库 requests: 爬虫使用到的请求库 jsonpath: 处理json数据的第三方库 os: python文件系统操作的库 urlretrieve: 对url解析的库 tkinter: tkinter是python中使用较多的GUI库,GUI是指的页面的控件操作,类似R中最基础的编辑器R-gui,它提供一些最基础的绘图工具,能够实现图形化按钮,文本框,有点VB的味道,本文中使用到图形控件主要有

  • Button按钮控件:在程序中显示按钮。
  • Entry 输入控件:用于显示简单的文本内容
  • Label 标签控件
  • Listbox 列表框控件,显示字符串返回给用户
  • Text 文本控件,显示多行文本

软件目标

  1. 开发一款音乐下载器
  2. 通过爬虫获取音乐解析网上的音乐
  3. 实现界面下载音乐

教程来自B站python学习者

代码细节

代码语言:javascript复制
# 导入需要的库
# 搜索歌曲名
import requests
import jsonpath
import os
from urllib.request import urlretrieve
from tkinter import * 

# 爬虫部分=-===============================================
# 歌曲下载函数
def song_load(url,title):
    # 创建文件夹用于保存下载的音乐
    os.makedirs("音乐",exist_ok=TRUE)
    # 设置保存路径和保存名字
    path ="音乐{}.mp3".format(title)
    # 插入文本,显示下载进度
    text.insert(END,'歌曲:{}...正在下载...'.format(title))
    # 文本框滚动
    text.see(END)
    # 更新
    text.update()
    # 通过urlretrieve函数请求下载
    urlretrieve(url,path)
    # 在文本控件中显示下载完成
    text.insert(END,'{}已经下载完成'.format(title))
    # 文本框滚动
    text.see(END)
    # 更新
    text.update()



# 定义音乐获取函数
def get_music_name():
    name=entry.get()
    # 添加请求头防止反扒
    # 这里和之前的不同采用的是X-Requested-With
    headers={
        'X-Requested-With':'XMLHttpRequest'
    }
    # 参数是post请求特殊要求,如登录和搜索等
    # 这个时候需要将表单数据加入请求函数中
    params={
        'input':name,
        'filter':'name',
        'type':'netease',
        'page':1,
    }
    # 目标网址,为一个免费的vip音乐解析网站
    url = 'http://www.youtap.xin/'
    # 通过post函数请求目标网址
    resp = requests.post(url,data=params,headers=headers)
    # 通过json函数解析目标
    data = resp.json()
    #获得目标音乐第一个的名字
    title=jsonpath.jsonpath(data,"$..title")[0]
    #获得目标音乐作者
    author=jsonpath.jsonpath(data,"$..author")[0]
    # 获得下载地址
    url=jsonpath.jsonpath(data,"$..url")[0]
    # 下载音乐
    song_load(url,title)



# 界面布局-==========================================================
# 1. 创建画布,通过Tk函数建立控件
root = Tk()
# 2. 添加控件标题
root.title("音乐下载器")
# 3. 设置程序的窗口大小
root.geometry('760x550 400 200')
# 4. 标签组件
label=Label(root,text='请输入下载的歌曲: ',font=('华文行楷',20))
# 5. 标签定位
label.grid()

# 6.设置输入框,并定位输入框位置为0行1列
entry = Entry(root,font=('隶书',20))
entry.grid(row=0, column=1)
# 7. 设置列表框,并定位为1行0-2列,同时设置单元格大小
text=Listbox(root,font=('隶书',20),width=50,height=15)
text.grid(row=1,columnspan=2)
# 8.添加下载按钮控件
# 通过command参数调用之前写好的get_music_name函数
button1=Button(root,text='下载: ',font=('隶书',15),command=get_music_name)
button1.grid(row=2,column=0,sticky=W)
# 9.退出按钮
# 通过command参数调用系统的退出函数,实现退出
button2=Button(root,text='退出: ',font=('隶书',15),command=root.quit)
button2.grid(row=2,column=1,sticky=E)


# 通过循环不断显示界面,否则界面为一闪而过
root.mainloop()

程序运行结果

界面

界面不是很完美,主要是界面的大小设置问题,出现了许多没用的边框

进行下载

输入框、下载按钮、退出按钮、列表框控件运行良好

下载结果

在工作目录下,找到下载好的音乐

测试可听

通过音乐播放器测试,歌曲为完整的

结束语

到今天已经开学快一周了,回北京之后,一直在忙,中途还去山东出差了一次,日更的公众号也被我拖成了周更,最近事儿也是有点多,愿世界和平,人人幸福。

love&peace

0 人点赞