此文章学习心得:教学视频为B站up主(Python编程语言),视频地址为:https://www.bilibili.com/video/BV1BD4y1S7iP
一部分:
用pyqt5-tool工具生成基本窗口,保存ui文件,pip install pyqt5 镜像源网址,pyqt5-tool工具为简单界 面拖拽工具,这里不做介绍了。
将保存的ui文件转换成python文件,cmd进入ui文件路径,输入pyuic5 -o py文件 ui文件
打开python文件,代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '1.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import pprint
import jsonpath
import requests
import json
import re
from urllib.request import urlretrieve
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import os
from PyQt5.QtGui import QPalette, QBrush, QPixmap
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(250, 80, 331, 31))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(370, 400, 101, 31))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "QQ音乐下载器"))
self.lineEdit.setPlaceholderText(_translate("MainWindow", "请输入歌曲名称"))
self.pushButton.setText(_translate("MainWindow", "点击下载"))
这里可以简单设置下软件背景,放入setupUi()方法中
#设置软件背景
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("图片/1.png")))
MainWindow.setPalette(palette)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
二部分:
爬虫爬取歌曲,放入class Ui_MainWindow()类中
搜索
https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E6%88%91%E4%BB%AC%E7%9A%84%E6%AD%8C
歌曲ID
https://y.qq.com/n/yqq/song/002Ozz5x2WOvRi.html
接口解析
http://www.douqq.com/qqmusic/qqapi.php
```python
def download_mp3(self):
kw = 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=35886556358007068&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w={}&g_tk_new_20200303=5381&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'.format(kw)
response = requests.get(url)
html_doc = response.json()
mids = jsonpath.jsonpath(html_doc, "$..mid")
link = 'http://www.douqq.com/qqmusic/qqapi.php'
headers = {
'Accept-Language': 'zh-CN,zh;q=0.9',
'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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
data = {'mid': 'https://y.qq.com/n/yqq/song/{}.html'.format(mids[0])}
req = requests.post(url=link, data=data, headers=headers).text
# print(req)
req = json.loads(req)
req = req.replace('\/', '/')
# print(req)
# 正则
res = re.compile('"m4a":"(.*?)",')
rs = re.findall(res, req)
#这里发现有些,mid通过接口获取的m4a可能为空,做个判断。
if rs != []:
mp3 = rs [0]
else:
pass
print("正在下载:{}".format(kw))
urlretrieve(mp3, kw+'.mp3')
print('下载完成!')
第三部分:绑定按钮,放入setupUi()方法中
#绑定函数和按钮
self.pushButton.clicked.connect(self.download_mp3)
第四部分:编写main实现功能调用展示:
if __name__ == '__main__':
#实例化一个QTAPP对象
app = QtWidgets.QApplication(sys.argv)
#装载各个组件
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
可以看到项目目录中产生了mp3文件。