源码视频链接:【python实战教程】从零带你用python打造全网音乐下载器_哔哩哔哩_bilibili【python实战教程】从零带你用python打造全网音乐下载器https://www.bilibili.com/video/BV1xv411i7DV/?spm_id_from=333.788
资源网站:http://www.qyun.vip/music/?name=%E5%90%8E%E6%9D%A5&type=kugou
2、前端设计 页面效果图: 使用效果图: 前端代码:from tkinter import *
# 一、前端界面设计
# 1、窗体主体设计
# 创建窗体
root = Tk()
# 设置标题
root.title('下载器 v0.1')
# 设定窗口界面的大小
width = 610
height = 455
# 设置在屏幕中心打开窗口
screen_width, screen_height = root.maxsize() #获取当前屏幕的最大的长、宽
root_place = '%dx%d+%d+%d' % (width, height, (screen_width - width) / 2, (screen_height - height) / 2) #拼接窗体大小、位置参数
root.geometry(root_place) #设定打开的窗体的位置
# 2、窗体内容设计,使用grid(网格)布局:行+列格式
# 全局参数,设定整体的字体、大小
font = ('华文行楷', 18)
# 第一行布局设定:标签(直接显示文字)+输入框
label = Label(root, text='请输入下载的资源链接(URL):', font=font).grid() #标签
entry = Entry(root, font=font).grid(row=0, column=1) #输入框
# 第二行布局设定:文本框(不可在前端进行输入操作),可使用函数在其中输出对应的数据
text = Listbox(root, font=font, width=50, height=15).grid(row=1, columnspan=2)
# 第三行布局设定:下载按钮、退出按钮
# 下载按钮:功能(点击后执行回调函数功能,即后端的下载数据的函数),使用command参数绑定后端自定义参数get_url
download_button = Button(root, text='开始下载', font=font, command=get_url).grid(row=2, column=0)
# 退出按钮:功能(点击后关闭前端界面,退出程序),使用command参数绑定tkinter的自带功能quit
exit_button = Button(root, text='退出', font=font, command=root.quit).grid(row=2, column=1)
# 3、持续打开窗体,方便用户使用
root.mainloop()
3、后端逻辑(功能,使用爬虫实现)
import os
from urllib.request import urlretrieve
import requests
import jsonpath
# 二、功能(爬虫实现)
# 歌曲下载函数
def song_download(url, title):
# 创建文件夹
os.makedirs('音乐', exist_ok=True)
path = '音乐{}.mp3'.format(title)
# 文本框信息提示
text.insert(END, '歌曲:{},正在下载...'.format(title))
# 文本框滚动
text.see(END)
# 更新
text.update()
# 下载
# requests.get() #使用requests模块的get方法获取文件
urlretrieve(url, path) # 使用内置的urlretrieve模块获取文件,更快速
# 下载完毕提示
text.insert(END, '下载完毕:{},敬请欣赏!'.format(title))
# 文本框滚动
text.see(END)
# 更新
text.update()
# 搜索歌曲名
def get_music_name():
name = entry.get()
headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36',
# 'cookie': 'td_cookie = 2230107881',
'X-Requested-With': 'XMLHttpRequest' # 判断请求是ajax同步还是异步
}
params = {
'input': name,
'filter': 'name',
'type': 'kugou',
'page': 1,
}
url = 'http://www.qyun.vip/music/'
response = requests.post(url=url, data=params, headers=headers)
# print(response.text) #文本形式打印网页源码
# print(response.content.decode('utf-8')) # 如出现乱码可以使用本方法转码后打印网页源码
# print(response.json()) # 响应返回数据为json时,要使用json进行数据解析
data = response.json()
# 返回当前页面的歌曲,解析结果为列表
title = jsonpath.jsonpath(data, "$..title")[0]
author = jsonpath.jsonpath(data, "$..author")[0]
url = jsonpath.jsonpath(data, "$..url")[0]
print(title, author, url)
song_download(url, title)
4、使用pyinstaller模块对代码进行打包
打开cmd,使用pyinstaller -F 文件目录 进行打包
pyinstaller -F D:PYTHON 7爬虫 2实战项目 1音乐下载器 1全网音乐下载器.py #py文件的完整链接5、总结拓展
import os
from tkinter import *
from urllib.request import urlretrieve
import requests
import jsonpath
# 2、下载资源函数
def download(url, title):
# 调用os模块,新建文件夹并命名,同时检查文件夹如果已存在就不再重新创建
os.makedirs('资源', exist_ok=True)
# 设置获取到的资源名称及格式,并将获取到的资源标题写入标题中
path = '资源{}.mp4'.format(title)
# 在前端的text文本框中显示提示:下载中...
text.insert(END, '{}正在下载...'.format(title))
text.see(END)
text.update()
# 根据url获取资源,并将获取到的资源保存到本地路径中
urlretrieve(url, path)
# 在前端的text文本框中显示提示:下载完成!
text.insert(END, '{}下载完毕!'.format(title))
text.see(END)
text.update()
# 1、获取资源信息、下载链接函数
def get_url():
# 使用抓包工具获取requests.post的主要参数,Http请求头信息
# headers:字典格式,请求标头信息,主要包含:
# User-Agent:浏览器信息、
# cookie:客户端会话技术,将数据保存到客户端,在不登陆的情况下完成服务器对客户端的身份识别、
# X-Requested-With:判断请求类型是否为Ajax请求
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50',
'cookie': ''
}
# params表单数据
params = {
'CourseChapters_ID': '666',
'LookType': 0,
'LookTime': 1,
'IP': '210.21.231.98'
}
# 从前端输入框获取资源的url链接
# url = entry.get()
url = '..'
# 使用requests的post方法获取响应数据
response = requests.post(url=url, data=params, headers=headers)
# 由于获取到的数据为json格式信息,需对信息进行解析
data = response.json()
# 使用jsonpath模块的jsonpath方法,对json中的信息进行解析,获取RequestId对应的value值
# jsonpath(json文件,"$..关键字"),返回json文件中的关键字对应的数据,返回值为列表
RequestId = jsonpath.jsonpath(data, "$..RequestId") #取出列表的值
# 输出RequestId列表检查数据
print(RequestId[0])
# 输出资源的标题、作者、资源链接url
# print(title, author, url)
# 执行下载函数,将解析到的资源链接保存到本地
# download(url, title)
get_url()
# 一、前端界面设计
# 1、窗体主体设计
# 创建窗体
root = Tk()
# 设置标题
root.title('下载器 v0.1')
# 设定窗口界面的大小
width = 610
height = 455
# 设置在屏幕中心打开窗口
screen_width, screen_height = root.maxsize() #获取当前屏幕的最大的长、宽
root_place = '%dx%d+%d+%d' % (width, height, (screen_width - width) / 2, (screen_height - height) / 2) #拼接窗体大小、位置参数
root.geometry(root_place) #设定打开的窗体的位置
# 2、窗体内容设计,使用grid(网格)布局:行+列格式
# 全局参数,设定整体的字体、大小
font = ('华文行楷', 18)
# 第一行布局设定:标签(直接显示文字)+输入框
label = Label(root, text='请输入下载的资源链接(URL):', font=font).grid() #标签
entry = Entry(root, font=font).grid(row=0, column=1) #输入框
# 第二行布局设定:文本框(不可在前端进行输入操作),可使用函数在其中输出对应的数据
text = Listbox(root, font=font, width=50, height=15).grid(row=1, columnspan=2)
# 第三行布局设定:下载按钮、退出按钮
# 下载按钮:功能(点击后执行回调函数功能,即后端的下载数据的函数),使用command参数绑定后端自定义参数get_url
download_button = Button(root, text='开始下载', font=font, command=get_url).grid(row=2, column=0)
# 退出按钮:功能(点击后关闭前端界面,退出程序),使用command参数绑定tkinter的自带功能quit
exit_button = Button(root, text='退出', font=font, command=root.quit).grid(row=2, column=1)
# 3、持续打开窗体,方便用户使用
root.mainloop()



