前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python苦短-爬取音乐

python苦短-爬取音乐

作者头像
火星娃统计
发布2020-09-15 15:52:25
1.4K0
发布2020-09-15 15:52:25
举报

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学习者

代码细节

# 导入需要的库
# 搜索歌曲名
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python苦短-下载音乐
    • 概述
      • 软件目标
        • 代码细节
          • 程序运行结果
            • 结束语
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档