Python GUI:PyQT5+爬虫实现简单音乐下载器

此文章学习心得:教学视频为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&notice=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文件。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值