python-酷我音乐下载器

# code:utf-8
import sys
from PyQt5.Qt import *
from PyQt5.QtWidgets import QTableWidget, QPlainTextEdit,QApplication, QWidget, QPushButton
import requests
import json
import os

class MyTable(QTableWidget,QWidget):
    def __init__(self, *args,**kwargs):
        super(MyTable, self).__init__(*args,**kwargs)
        self.setWindowTitle("酷我音乐下载器")
        self.resize(800, 450)
        self.setFixedSize(800,450)
        self.setup_ui()

    def setup_ui(self):
        self.textLine()
        self.table()
        self.btn()

    def table(self):
        self.setColumnCount(2)
        self.setRowCount(25)
        self.setColumnWidth(0, 240)
        self.setColumnWidth(1, 330)
        self.setEditTriggers(QTableWidget.DoubleClicked)
        column_name = [
            '歌曲名称',
            '歌曲作者',
        ]
        self.setHorizontalHeaderLabels(column_name)
        self.setContextMenuPolicy(
            Qt.CustomContextMenu)  # 右键菜单,如果不设为CustomContextMenu,无法使用customContextMenuRequested
        self.customContextMenuRequested.connect(self.showContextMenu)

    def textLine(self):
        self.musicname = QPlainTextEdit(self)
        self.musicname.resize(150, 32)
        self.musicname.move(620, 100)

    def btn(self):
        self.btn_get = QPushButton(self)
        self.btn_get.setText("搜索")
        self.btn_get.move(650, 50)
        self.btn_get.clicked.connect(self.find_music)

    def showContextMenu(self):
        self.contextMenu = QMenu(self)
        self.actionA = self.contextMenu.addAction(u'下载歌曲')
        self.contextMenu.popup(QCursor.pos())
        self.index=self.currentRow()
        self.actionA.triggered.connect(self.down_music)
        self.contextMenu.show()

    def down_music(self):
        root = './downMusic/'
        if not os.path.exists(root):
            os.mkdir(root)
        music_content = requests.get(url=self.music_url[self.index]).content
        with open(root + "{}({}).mp3".format(self.music_list[self.index]['name'], self.music_list[self.index]['singer']), "wb") as f:
            f.write(music_content)
            QMessageBox.information(self, "提示", "歌曲下载完毕!", QMessageBox.Yes)

    def find_music(self):
        kw_txt = self.musicname.toPlainText()
        self.btn_get.setEnabled(False)
        kw=kw_txt.replace(" ","")
        if kw!='':
            headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63",
                "Cookie": "_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P",
                "Referer": "http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6",
                "csrf": "HYZQI4KPK3P",
            }
            params = {
                "key": kw,
                "pn": "1",
                "rn": "25",
                "httpsStatus": "1",
                "reqId": "cc337fa0-e856-11ea-8e2d-ab61b365fb50",
            }
            self.music_list = []
            self.music_url=[]
            url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"
            res = requests.get(url=url, headers=headers, params=params)
            if res.status_code==200:
                res.encoding = "utf-8"
                text = res.text
                json_list = json.loads(text)
                datapack = json_list["data"]["list"]
                for i in datapack:
                    music_name = i["name"]
                    music_singer = i["artist"]
                    rid = i["rid"]
                    api_music = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3" \
                                "&br=128kmp3&from=web&t=1598528574799&httpsStatus=1" \
                                "&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5".format(rid)
                    api_res = requests.get(url=api_music)
                    music_url = json.loads(api_res.text)["url"]
                    print(music_name+"  "+music_singer+"   "+music_url)
                    music_dict = {}
                    music_dict["name"] = music_name
                    music_dict["singer"] = music_singer
                    self.music_list.append(music_dict)
                    self.music_url.append(music_url)
                self.updateTable(self.music_list)
            else:
                QMessageBox.information(self, "提示", "网络出现故障!", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "提示", "请输入歌曲名字", QMessageBox.Yes)

    def updateTable(self,data):
        if len(data)>0:
            for row in range(0, len(data)):
                name = data[row]['name']
                self.setItem(row, 0, QTableWidgetItem(name))
            for col in range(0, len(data)):
                url = data[col]['singer']
                self.setItem(col, 1, QTableWidgetItem(url))
            QMessageBox.information(self, "提示", "歌曲搜索完毕!", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "提示", "未查询到相关信息!", QMessageBox.Yes)
        self.btn_get.setEnabled(True)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myTable = MyTable()
    desktop = QApplication.desktop()
    x = (desktop.width() - myTable.width()) // 2
    y = (desktop.height() - myTable.height()) // 2
    myTable.move(x,y)
    myTable.show()
    app.exit(app.exec_())
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Python编写爬虫来下载酷我音乐。首先,您需要安装相应的库,例如requests和beautifulsoup4。然后,您可以编写代码来发送HTTP请求,获取酷我音乐网页的内容,并使用BeautifulSoup解析HTML以获取相关信息(例如歌曲下载链接)。最后,您可以使用requests库下载歌曲文件到本地。 以下是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup # 搜索歌曲 def search_song(keyword): url = f"https://www.kuwo.cn/search/list?key={keyword}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") song_list = soup.select(".song.item") if not song_list: print("未找到相关歌曲") return song = song_list[0] song_id = song["data-rid"] download_song(song_id) # 下载歌曲 def download_song(song_id): url = f"http://www.kuwo.cn/url?format=mp3&rid={song_id}&response=url&type=convert_url3&br=128kmp3&from=web&t=1627868849728&reqId=1a423380-eedc-11eb-90e7-9fd2054fe78d" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers) result = response.json() download_url = result["url"] filename = f"song.mp3" response = requests.get(download_url) with open(filename, "wb") as f: f.write(response.content) print(f"歌曲已下载:{filename}") # 使用示例 search_song("歌曲名称") ``` 请注意,这只是一个简单的示例代码,具体的实现可能因网站结构变化而有所调整。另外,爬取网站数据时要遵守网站的相关规定和法律法规,合理使用爬虫技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值