Python打造qq音乐歌曲下载器

  • 搭建应用程序界面
  • 实现功能,下载音乐

桌面应用程序,GUI

tkinter import TK:python自带的,简单,好入门,但较丑

另外比较美观的:

wxpython

pyqt5,它不是python独有的,其他语言中也可以用到。它的本质是基于面向对象开发的。

零基础也可以快速搭建GUI界面,

安装pyqt5:

pip3 install pyqt5

安装pyqt5_tools:

pip3 install pyqt5-tools

在pycharm中配置pyqt5-tools工具:(可选的)

https://www.jb51.net/article/156026.htm

安装成功以后,我们打开pyqt5_tools文件夹:

它的目录结构如图所示:

我们打开 Qt文件夹 -> bin文件夹
可以看到:

如图,我们打开 designer.exe
可以看到:

这样一个界面就是我们即将使用的UI界面搭建工具。

搭建应用程序界面

1、创建主窗口:

2、通过拖拽组件绘制主界面

3、选中输入框,添加隐藏性提示文字

4、修改窗口标题

界面搭建好了以后,我们把它保存到桌面:

我们使用notepad++打开,可以看到它的格式是这样的:

这样的.ui文件是无法直接提供给python使用的。
我们需要使用pyuic5把它转换为.py文件
启动cmd命令行,输入以下命令:

pyuic5 -o demo.py untitled1.ui

demo.py是我们自定义的生成.py文件的名称。
执行完毕之后,桌面即生成了demo.py文件

运行该界面:
导入sys模块:

import sys #使窗口可以关闭
if __name__=='__main__':app = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()    #装载各个组件ui = Ui_MainWindow()    #创建该类的实例对象ui.setupUi(MainWindow)  #把组件传递进来MainWindow.show()   #显示出来sys.exit(app.exec())    #绑定程序退出时,关闭窗口

执行结果:

实现功能,下载音乐

我们通过网页版QQ音乐,搜索一首歌曲,发现它的链接是:
https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E6%A1%A5%E8%BE%B9%E5%A7%91%E5%A8%98
最后一个参数w = 歌曲名称。
这样一个链接我们先保存下来,指不定待会要用到。
我们点击它搜索到的歌曲列表的第一首(我们仅仅下载第一首歌)

这个url是:https://y.qq.com/n/yqq/song/001zLvbN1NYMuv.html
它实际上包含了歌曲的 ID :001zLvbN1NYMuv
有了歌曲 ID,如何下载?
能不自己动手,就不自己动手。
python有很多很多的第三方的工具。
我们打开网站:QQ音乐无损接口api
我们把刚才复制的url粘贴进来,点击查询:

我们现在就通过这个api
我们右键检查,找到network,再次重新查询:


mid就是携带歌曲id的那个粘贴过来的url,也就是这首歌的播放链接。
Preview:


有了这个接口,我们就可以下载音乐了。
接口:http://www.douqq.com/qqmusic/qqapi.php
让这个接口来帮助我们解析。

我们请求刚刚复制的搜索的url:

url = 'https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E6%A1%A5%E8%BE%B9%E5%A7%91%E5%A8%98'
resp = requests.get(url)
print(resp.text)

在结果中找寻歌曲ID:

发现找不到我们所需要的歌曲ID。
那就意味着我们的请求链接很可能没有找对。

那我们回过头来,重新寻找。

这样就找到了包含歌曲ID请求链接:

它才是我们需要请求的地址:
https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.top&searchid=20195022171686391&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=%E6%A1%A5%E8%BE%B9%E5%A7%91%E5%A8%98&g_tk_new_20200303=1805662696&g_tk=1805662696&loginUin=1543660640&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0

替换刚才的请求地址,程序打印后的结果是:

现在我们需要从中提取出歌曲的ID
这时候我们就需要用到一个工具:jsonpath

import jsonpath
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.top&searchid=20195022171686391&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=%E6%A1%A5%E8%BE%B9%E5%A7%91%E5%A8%98&g_tk_new_20200303=1805662696&g_tk=1805662696&loginUin=1543660640&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0'
resp = requests.get(url)
# 数据类型转换:转换为json
html_doc = resp.json() #它是自带的方法
# 解析:利用jsonpath找到根节点$下的,任何路径下的mid
mids = jsonpath.jsonpath(html_doc,"$..mid")
print(mids)

打印结果是搜索关键字后得到的一个一个的歌曲ID:

有了歌曲ID,我们通过字符串拼接,即可得出完成的歌曲播放地址。
我们先把请求头转换为字典格式:

源匹配:

(.*): (.*)$

替换匹配:

"$1": "$2",

请求接口:

# 接口地址
link = 'http://www.douqq.com/qqmusic/qqapi.php'
# 请求这个接口的时候是需要携带参数的,参数就是拼接好的歌曲链接,请求方式为post
data = {'mid':'https://y.qq.com/n/yqq/song/001zLvbN1NYMuv.html'}
# 请求头
headers = {"Accept": "application/json, text/javascript, */*; q=0.01","Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7","Connection": "keep-alive","Content-Length": "65","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Host": "www.douqq.com","Origin": "http://www.douqq.com","Referer": "http://www.douqq.com/qqmusic/","User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","X-Requested-With": "XMLHttpRequest",}
req = requests.post(link,data=data,headers=headers)
print(req.text)

得到的结果为:

它里面包含了我们要下载的歌曲链接。

http:\\\/\\\/aqqmusic.tc.qq.com\\\/amobile.music.tc.qq.com\\\/C400001zLvbN1NYMuv.m4a

但是我们可以看到这个链接格式有点问题。
复制这个链接是打不开的。
我们需要使用正则表达式来进行字符串的处理。
由于它是一个json格式的内容,我们首先需要进行一个数据类型转换。

import json
req = requests.post(link,data=data,headers=headers)
# 将响应结果转换为字符串
reqText = req.text
print(reqText)
# 将字符串转换为json格式
reqJson = json.loads(reqText)
reqJson = reqJson.replace('\/','/')
print(reqJson)

可以看到:

链接已经变为正常的格式。

可以选择m4a格式,mp3普通品质的,mp3高品质的等等。
我们仅仅只下载它的m4a格式的,
找到m4a格式的:

然后需要使用正则表达式提取我们需要的内容:

import re
# regex
res = re.compile('"m4a":"(.*?)",')
result = re.findall(res,reqJson)
print(result)

结果:

然后我们就导入一个模块,进行下载:

from urllib.request import urlretrieve
music = result[0]
urlretrieve(music,'桥边姑娘.mp3')

然后我们就得到了这样的一首歌:

我们发现尽管我们选择的是m4a格式进行的下载,保存成mp3格式也是好使的。


然后我们把爬虫代码封装为一个函数,方便与界面进行整合。
改变请求地址中url的歌曲名称部分,它是w参数的内容,改变其为可变内容。

获取我们输入的歌曲名称:

musicName = self.lineEdit.text()

格式化字符串可变的部分:

url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.top&searchid=20195022171686391&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w={}&g_tk_new_20200303=1805662696&g_tk=1805662696&loginUin=1543660640&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0'.format(musicName)
data = {'mid': 'https://y.qq.com/n/yqq/song/{}.html'.format(mids[0])}
urlretrieve(music, musicName+'.mp3')

接下来我们为“下载”按钮绑定单击事件:
需要在函数setupUi()的末尾绑定单击事件.

   #绑定按钮的单击事件self.pushButton.clicked.connect(self.download_music)

注意这里调用的download_music一定不要加括号!!!

到此为止我们的程序就全部写完了。
当然这仅仅是一个小案例,可以扩展的地方还有很多。

案例源码,提取码 x91z
打包后的exe文件,提取码 t9ex

Python打造qq音乐歌曲下载器相关推荐

  1. python爬取付费音乐包有什么用_用Python制作音乐聚合下载器!付费的好像也能下载哦!...

    现在的音乐APP有很多,为了不下载很多的APP,所以咱用python做了一个聚合的音乐下载器,现在聚合了咪咕音乐.QQ音乐,下面是效果图 安装 需要安装一个辅助模块 prettytable,用于美化控 ...

  2. 用 Python 制作音乐聚合下载器

    文 | 某某白米饭 来源:Python 技术「ID: pythonall」 现在的音乐APP有很多,为了不下载很多的APP,所以咱用python做了一个聚合的音乐下载器,现在聚合了咪咕音乐.QQ音乐, ...

  3. 如何更换计算机中音乐的播放器,电脑中自定义更换QQ音乐歌曲封面图的操作步骤...

    QQ音乐音乐的使用中,小伙伴们遇到故障可以直接在本网站上进行搜索,找到处理故障的方法,那有用户发现听歌的时候,歌曲封面和显示的出处内容与不相符的问题导致我们的听歌体验不是很好,遇到这一个QQ音乐使用中 ...

  4. Jo音乐——歌曲下载与播放器

    更多文章请关注我的博客 简介 这是我一年前的课设 它写作歌曲播放器,读作wyy歌曲下载器() 它能勉强跑起来 它是一坨屎山 Github仓库 功能 所以,它就是一个极其简陋的音乐播放器,它大概长这个样 ...

  5. QQ音乐歌曲播放源的获取

    这里仅分享下自己的解决思路,有不对之处还请指正! 最近在学习vue来是实现高仿qq音乐播放器,由于看的不是最新的视频,所以视频上的qq音乐歌曲源已经无用了.在qq音乐上播放歌曲发现请求的url如图 这 ...

  6. 送书|Python采集QQ音乐热歌榜首数据

    今天给大家带来用python采集QQ音乐的热评-文末有送书哦- 我们可以看到这首歌曲的评论有10881条,不愧是榜首热歌,评论比较高. 一.初步测试 我们首先使用selenium测试一下环境: fro ...

  7. php语言编写一个下载器,PHP实现音乐搜索下载器

    PHP实现音乐搜索下载器 发布时间:2020-07-01 09:57:33 来源:亿速云 阅读:56 作者:Leah 本篇文章为大家展示了PHP实现音乐搜索下载器,代码简明扼要并且容易理解,绝对能使你 ...

  8. php 终端 音乐,分享一个PHP写的命令行音乐搜索下载器

    music-php 2.0 - 一个 PHP 写的命令行音乐搜索下载器. music-php 是一个 PHP 写的命令行音乐搜索下载器,基于 Meting 支持QQ.网易.酷狗.百度. 项目地址 ht ...

  9. Python 网易云音乐 MV 下载

    Python 网易云音乐 MV 下载 from selenium import webdriver from selenium.webdriver.common.by import By from s ...

  10. 转:使用Python写一个m3u8多线程下载器

    转载:使用Python写一个m3u8多线程下载器 可去看原文:https://blog.csdn.net/muslim377287976/article/details/104340242 文章目录 ...

最新文章

  1. 关于学习Python的一点学习总结(27->关键字参数和默认值)
  2. ubuntu安装与配置nfs服务器
  3. jupyter notebok 调用本目录下的其他py文件
  4. 关于寻路算法的一些思考(5):处理移动中的障碍物
  5. Dev-DXperience12.2版的新产品介绍:DXTREME
  6. Tomcat目录和文件讲解
  7. 不用下载软件,mac自带丰富快捷键截图Ctrl+shift+4
  8. jQuery插件开发之windowScroll
  9. html在线测试 css,HTML+CSS测试
  10. 阶段3 2.Spring_03.Spring的 IOC 和 DI_5 BeanFactory和ApplicationContext的区别
  11. 纽微特荒唐事:都知道是找人顶罪,竟没人敢指正
  12. Luogu1886 滑动窗口 /【模板】单调队列
  13. Github和Git的基本教程,适合新手
  14. python 文本替换 速度_python 实现批量替换文本中的某部分内容
  15. 《用户故事地图》摘录
  16. Office在线协作(一)- 在本地服务器上安装ONLYOFFICE Docs Community Edition For Windows Server - 超详细安装教程
  17. java TIF 转 JPG
  18. wind7计算机控制面板在哪,Win7控制面板在哪打开|win7打开控制面板的小技巧
  19. RPG或SLG游戏在线地图编辑器
  20. 一款手机电脑都能用的进销存财务软件

热门文章

  1. Windows历史版本
  2. 证书制作,各个环节的原理以及推送证书制作,和如何为推送服务器提供证书
  3. IP反向解析查询的方法
  4. 【mfc】解决鼠标钩子被占用焦点后不响应的问题
  5. 2021年5大最佳3D动画软件
  6. 基于matlab的音频处理论文,基于Matlab的语音信号处理与仿真设计毕业论文
  7. 刷新计算机dns缓存的命令,电脑如何刷新dns缓存【图解】
  8. java计算机毕业设计随心淘网管理系统源代码+数据库+系统+lw文档
  9. 【阿朱一帖看尽】2014年BAT到底干了些什么
  10. 各种激活破解工具一览