python苦短-爬取音乐
时间:2022-07-25
本文章向大家介绍python苦短-爬取音乐,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python苦短-下载音乐
概述
使用到的库 requests: 爬虫使用到的请求库 jsonpath: 处理json数据的第三方库 os: python文件系统操作的库 urlretrieve: 对url解析的库 tkinter: tkinter是python中使用较多的GUI库,GUI是指的页面的控件操作,类似R中最基础的编辑器R-gui,它提供一些最基础的绘图工具,能够实现图形化按钮,文本框,有点VB的味道,本文中使用到图形控件主要有
- Button按钮控件:在程序中显示按钮。
- Entry 输入控件:用于显示简单的文本内容
- Label 标签控件
- Listbox 列表框控件,显示字符串返回给用户
- Text 文本控件,显示多行文本
软件目标
- 开发一款音乐下载器
- 通过爬虫获取音乐解析网上的音乐
- 实现界面下载音乐
教程来自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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解在YII2框架中使用UEditor编辑器发布文章
- 在Laravel的Model层做数据缓存的实现
- Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
- php连接mysql数据库最简单的实现方法
- 解决laravel id非自增 模型取回为0 的问题
- PHP7.0连接DB操作实例分析【基于mysqli】
- Laravel获取当前请求的控制器和方法以及中间件的例子
- laravel中数据显示方法(默认值和下拉option默认选中)
- laravel请求参数校验方法
- ThinkPHP 5.x远程命令执行漏洞复现
- 关于php开启错误提示的总结
- php创建类并调用的实例方法
- php异常处理捕获错误整理
- 可视化IDE的探索之路
- php模式设计之观察者模式应用实例分析