网易云音乐下载.py

第五版(带有图形界面):

# -*- coding: utf-8 -*-

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt, Slot)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QMainWindow, QMenuBar,
    QPushButton, QRadioButton, QSizePolicy, QStatusBar,
    QTextEdit, QWidget)

import sys

class Ui_NeteaseCloudMusic_Download(object):
    def setupUi(self, NeteaseCloudMusic_Download):
        if not NeteaseCloudMusic_Download.objectName():
            NeteaseCloudMusic_Download.setObjectName(u"NeteaseCloudMusic_Download")
        NeteaseCloudMusic_Download.resize(850, 674)
        self.centralwidget = QWidget(NeteaseCloudMusic_Download)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(20, 50, 31, 31))
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(20, 110, 51, 17))
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setObjectName(u"label_3")
        self.label_3.setGeometry(QRect(20, 170, 67, 17))
        self.textEdit = QTextEdit(self.centralwidget)
        self.textEdit.setObjectName(u"textEdit")
        self.textEdit.setGeometry(QRect(80, 50, 281, 31))
        self.textEdit_2 = QTextEdit(self.centralwidget)
        self.textEdit_2.setObjectName(u"textEdit_2")
        self.textEdit_2.setGeometry(QRect(80, 110, 281, 31))
        self.textEdit_3 = QTextEdit(self.centralwidget)
        self.textEdit_3.setObjectName(u"textEdit_3")
        self.textEdit_3.setGeometry(QRect(80, 170, 281, 31))
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(410, 60, 171, 51))
        self.pushButton.clicked.connect(slotone)
        self.pushButton_2 = QPushButton(self.centralwidget)
        self.pushButton_2.setObjectName(u"pushButton_2")
        self.pushButton_2.setGeometry(QRect(410, 120, 171, 31))
        self.pushButton_2.clicked.connect(slotfour)
        self.pushButton_3 = QPushButton(self.centralwidget)
        self.pushButton_3.setObjectName(u"pushButton_3")
        self.pushButton_3.setGeometry(QRect(410, 160, 171, 31))
        self.pushButton_3.clicked.connect(slotfive)
        self.textEdit_4 = QTextEdit(self.centralwidget)
        self.textEdit_4.setObjectName(u"textEdit_4")
        self.textEdit_4.setGeometry(QRect(10, 230, 831, 381))
        self.radioButton = QRadioButton(self.centralwidget)
        self.radioButton.setObjectName(u"radioButton")
        self.radioButton.setGeometry(QRect(670, 90, 112, 23))
        self.radioButton.clicked.connect(slottwo)
        self.radioButton_2 = QRadioButton(self.centralwidget)
        self.radioButton_2.setObjectName(u"radioButton_2")
        self.radioButton_2.setGeometry(QRect(670, 140, 112, 23))
        self.radioButton_2.clicked.connect(slotthree)
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setObjectName(u"label_4")
        self.label_4.setGeometry(QRect(160, 10, 521, 31))
        self.label_4.setAlignment(Qt.AlignCenter)
        NeteaseCloudMusic_Download.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(NeteaseCloudMusic_Download)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 850, 27))
        NeteaseCloudMusic_Download.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(NeteaseCloudMusic_Download)
        self.statusbar.setObjectName(u"statusbar")
        NeteaseCloudMusic_Download.setStatusBar(self.statusbar)

        self.retranslateUi(NeteaseCloudMusic_Download)

        QMetaObject.connectSlotsByName(NeteaseCloudMusic_Download)
    # setupUi

    def retranslateUi(self, NeteaseCloudMusic_Download):
        NeteaseCloudMusic_Download.setWindowTitle(QCoreApplication.translate("NeteaseCloudMusic_Download", u"NeteaseCloudMusic_Download", None))
        self.label.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"ID:", None))
        self.label_2.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"Name:", None))
        self.label_3.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"Number:", None))
        self.pushButton.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"\u5f00\u59cb\u4e0b\u8f7d", None))
        self.pushButton_2.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"\u6e05\u7a7a\u4e0b\u8f7d\u5185\u5bb9", None))
        self.pushButton_3.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"\u6e05\u7a7a\u6267\u884c\u5185\u5bb9", None))
        self.radioButton.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"\u6279\u91cf\u4e0b\u8f7d", None))
        self.radioButton_2.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"\u5355\u66f2\u4e0b\u8f7d", None))
        self.label_4.setText(QCoreApplication.translate("NeteaseCloudMusic_Download", u"Qt & Python", None))
    # retranslateUi

@Slot()
def slotone():
    global xuanze
    ui.pushButton.setEnabled(False)
    ui.pushButton_2.setEnabled(False)
    ui.pushButton_3.setEnabled(False)
    ui.textEdit_4.setEnabled(False)
    ui.pushButton.setText("已完成0%")
    strone = ui.textEdit.toPlainText()
    strtwo = ui.textEdit_2.toPlainText()
    strthree = ui.textEdit_3.toPlainText()
    import requests
    from bs4 import BeautifulSoup
    header={
            'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
            'Referer': 'https://music.163.com/',
    }


    if xuanze == "1" :
       #print("看到歌单所在网址的链接了吗,它的格式类似于“https://music.163.com/#/LIST?id=ID”")
       LIST=strtwo
       ID=strone
       choicelimit=int(strthree)
       link = "http://music.163.com/" + LIST + "?id=" + ID
       r = requests.get(link, headers=header)
       html = r.content
       soup = BeautifulSoup(html, "html.parser")
       songs = soup.find("ul", class_="f-hide").select("a", limit=choicelimit)

       i = 1

       for s in songs:
           song_id = s['href'][9:]
           song_name = s.text
           song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
           ui.textEdit_4.insertPlainText("第 " + str(i) + " 首歌曲:" + song_down_link + "\n")
           print("第 " + str(i) + " 首歌曲:" + song_down_link)
           ui.textEdit_4.insertPlainText("正在下载...\n")
           print("正在下载...")
           QApplication.processEvents()



           response = requests.get(song_down_link, headers=header).content
           f = open(song_name + ".mp3", 'wb')
           f.write(response)
           f.close()
           ui.textEdit_4.insertPlainText("下载完成.\n")
           ui.pushButton.setText("已完成{:.2f}%".format(i*100/choicelimit))
           print("下载完成.\n")
           QApplication.processEvents()
           i = i + 1



    elif xuanze == "2" :
       song_name=strtwo
       song_id=strone
       song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
       ui.textEdit_4.insertPlainText("正在下载...\n")
       print("正在下载...")
       QApplication.processEvents()



       response = requests.get(song_down_link, headers=header).content
       f = open(song_name + ".mp3", 'wb')
       f.write(response)
       f.close()
       ui.textEdit_4.insertPlainText("下载完成.\n")
       print("下载完成.\n")
       QApplication.processEvents()

    else:
        ui.textEdit_4.setText("ERROR!")
        ui.pushButton.setEnabled(True)
        ui.pushButton_2.setEnabled(True)
        ui.pushButton_3.setEnabled(True)
        ui.textEdit_4.setEnabled(True)
        ui.pushButton.setText("开始下载")
        return

    ui.pushButton.setEnabled(True)
    ui.pushButton_2.setEnabled(True)
    ui.pushButton_3.setEnabled(True)
    ui.textEdit_4.setEnabled(True)
    ui.pushButton.setText("开始下载")

@Slot()
def slottwo():
    global xuanze
    xuanze = "1"

@Slot()
def slotthree():
    global xuanze
    xuanze = "2"
    ui.textEdit_3.setText("1")

@Slot()
def slotfour():
    ui.textEdit.setText("")
    ui.textEdit_2.setText("")
    ui.textEdit_3.setText("")

@Slot()
def slotfive():
    ui.textEdit_4.setText("")





if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QMainWindow()
    ui = Ui_NeteaseCloudMusic_Download()
    ui.setupUi(window)
    xuanze = "-1"
    window.show()
    sys.exit(app.exec())

第四版:

import requests
from bs4 import BeautifulSoup
header={
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
        'Referer': 'https://music.163.com/',
}

xuanze=input("您选择哪种下载模式?\n1. 网易云音乐批量下载\n2. 网易云音乐单曲下载\n请输入:")



if xuanze == "1" :
   print("看到歌单所在网址的链接了吗,它的格式类似于“https://music.163.com/#/LIST?id=ID”")
   LIST=input("现在,请输入它的LIST部分:")
   ID=input("现在,请输入它的ID部分:")
   choicelimit=int(input('您想要下载多少首歌曲?(歌单从上往下数)\n请输入:'))
   link = "http://music.163.com/" + LIST + "?id=" + ID
   r = requests.get(link, headers=header)
   html = r.content
   soup = BeautifulSoup(html, "html.parser")
   songs = soup.find("ul", class_="f-hide").select("a", limit=choicelimit)

   i = 1

   for s in songs:
       song_id = s['href'][9:]
       song_name = s.text
       song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
       print("第 " + str(i) + " 首歌曲:" + song_down_link)
       print("正在下载...")



       response = requests.get(song_down_link, headers=header).content
       f = open(song_name + ".mp3", 'wb')
       f.write(response)
       f.close()
       print("下载完成.\n\r")
       i = i + 1



elif xuanze == "2" :
   song_name=input("请输入歌曲名称:")
   song_id=input("请输入歌曲ID:")
   song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
   print("正在下载...")



   response = requests.get(song_down_link, headers=header).content
   f = open(song_name + ".mp3", 'wb')
   f.write(response)
   f.close()
   print("下载完成.\n\r")

第三版:

# 网易云音乐批量下载
print("看到歌单所在网址的链接了吗,它的格式类似于“https://music.163.com/#/LIST?id=ID”")
LIST=input("现在,请输入它的LIST部分:")
ID=input("现在,请输入它的ID部分:")
choicelimit=int(input('您想要下载多少首歌曲?(歌单从上往下数)\n请输入:'))
import requests
from bs4 import BeautifulSoup
header={	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
	'Referer':'http://93.174.95.27',
}
link = "http://music.163.com/" + LIST + "?id=" + ID
r = requests.get(link, headers=header)
html = r.content
soup = BeautifulSoup(html, "html.parser")
songs = soup.find("ul", class_="f-hide").select("a", limit=choicelimit)

i = 1

for s in songs:
    song_id = s['href'][9:]
    song_name = s.text
    song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
    print("第 " + str(i) + " 首歌曲:" + song_down_link)
    print("正在下载...")

    response = requests.get(song_down_link, headers=header).content
    f = open(song_name + ".mp3", 'wb')
    f.write(response)
    f.close()
    print("下载完成.\n\r")
    i = i + 1

第二版:

# 网易云音乐批量下载
print('请注意,部分歌曲可能由于版权、会员等原因无法下载完整的音乐文件(通常表现为文件体积甚小,无法正常播放),若下载到这类音乐文件请手动删除。')
print('您要下载哪一个榜单上的音乐?(输入数字)\n1.云音乐飙升榜\n2.云音乐新歌榜\n3.云音乐原创榜\n4.云音乐热歌榜\n5.云音乐说唱榜\n6.云音乐古典榜\n7.云音乐电音榜\n8.云音乐ACG榜\n9.云音乐韩语榜\n10.云音乐国电榜\n11.UK排行榜周榜\n12.美国Billboard榜\n13.Beatport全球电子舞曲榜\n14.KTV唛榜\n15.日本Oricon榜\n16.云音乐欧美热歌榜\n17.云音乐欧美新歌榜\n18.法国 NRJ Vos Hits 周榜\n19.云音乐ACG动画榜\n20.云音乐ACG游戏榜\n21.云音乐ACG VOCALOID榜\n22.中国新乡村音乐排行榜\n23.云音乐日语榜\n24.云音乐摇滚榜\n25.云音乐古风榜\n26.潜力爆款榜\n27.云音乐民谣榜\n28.听歌识曲榜\n29.网络热歌榜\n30.俄语榜\n31.越南语榜\n32.中文DJ榜')
choice=input('您的选择是:')
biaosheng = "19723756"
xinge = "3779629"
yuanchuang = "2884035"
rege = "3778678"
shuochang = "991319590"
gudian = "71384707"
dianyin = "1978921795"
ACG = "71385702"
hanyu = "745956260"
guodian = "10520166"
UK = "180106"
Billboard = "60198"
Beatport = "3812895"
KTV = "21845217"
Oricon = "60131"
omeirege = "2809513713"
omeixinge = "2809577409"
NRJVosHits = "27135204"
ACGdonghua = "3001835560"
ACGyouxi = "3001795926"
ACGVOCALOID = "3001890046"
zhongguoxinxiangcun = "3112516681"
riyu = "5059644681"
yaogun = "5059633707"
gufeng = "5059642708"
qianlibaokuan = "5338990334"
minyao = "5059661515"
tinggeshiqv = "6688069460"
wangluorege = "6723173524"
eyu = "6732051320"
yuenanyu = "6732014811"
zhongwenDJ = "6886768100"
if choice == "1" :
    choiceX = biaosheng
elif choice == "2" :
    choiceX = xinge
elif choice == "3" :
    choiceX = yuanchuang
elif choice == "4" :
    choiceX = rege
elif choice == "5" :
    choiceX = shuochang
elif choice == "6" :
    choiceX = gudian
elif choice == "7" :
    choiceX = dianyin
elif choice == "8" :
    choiceX = ACG
elif choice == "9" :
    choiceX = hanyu
elif choice == "10" :
    choiceX = guodian
elif choice == "11" :
    choiceX = UK
elif choice == "12" :
    choiceX = Billboard
elif choice == "13" :
    choiceX = Beatport
elif choice == "14" :
    choiceX = KTV
elif choice == "15" :
    choiceX = Oricon
elif choice == "16" :
    choiceX = omeirege
elif choice == "17" :
    choiceX = omeixinge
elif choice == "18" :
    choiceX = NRJVosHits
elif choice == "19" :
    choiceX = ACGdonghua
elif choice == "20" :
    choiceX = ACGyouxi
elif choice == "21" :
    choiceX = ACGVOCALOID
elif choice == "22" :
    choiceX = zhongguoxinxiangcun
elif choice == "23" :
    choiceX = riyu
elif choice == "24" :
    choiceX = yaogun
elif choice == "25" :
    choiceX = gufeng
elif choice == "26" :
    choiceX = qianlibaokuan
elif choice == "27" :
    choiceX = minyao
elif choice == "28" :
    choiceX = tinggeshiqv
elif choice == "29" :
    choiceX = wangluorege
elif choice == "30" :
    choiceX = eyu
elif choice == "31" :
    choiceX = yuenanyu
elif choice == "32" :
    choiceX = zhongwenDJ
else :
    print('您的输入有误,该程序将会报错退出!')
choicelimit=int(input('您想要下载多少首歌曲?(榜单从上往下数)\n请输入:'))
import requests
from bs4 import BeautifulSoup
header={	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
	'Referer':'http://93.174.95.27',
}
link = "http://music.163.com/discover/toplist?id=" + choiceX
r = requests.get(link, headers=header)
html = r.content
soup = BeautifulSoup(html, "html.parser")
songs = soup.find("ul", class_="f-hide").select("a", limit=choicelimit)

i = 1

for s in songs:
    song_id = s['href'][9:]
    song_name = s.text
    song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
    print("第 " + str(i) + " 首歌曲:" + song_down_link)
    print("正在下载...")

    response = requests.get(song_down_link, headers=header).content
    f = open(song_name + ".mp3", 'wb')
    f.write(response)
    f.close()
    print("下载完成.\n\r")
    i = i + 1

第一版:

# 网易云音乐批量下载
print('您要下载哪一个榜单上的音乐?(输入数字)\n1.网易云飙升榜\n2.网易云新歌榜\n3.网易云原创榜\n4.网易云热歌榜')
choice=input('您的选择是:')
biaosheng = "19723756"
xinge = "3779629"
yuanchuang = "2884035"
rege = "3778678"
if choice == "1" :
    choiceX = biaosheng
elif choice == "2" :
    choiceX = xinge
elif choice == "3" :
    choiceX = yuanchuang
elif choice == "4" :
    choiceX = rege
else :
    print('您的输入有误,该程序将会报错退出!')
choicelimit=int(input('您想要下载多少首歌曲?(榜单从上往下数)\n请输入:'))
import requests
from bs4 import BeautifulSoup
header={	'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
	'Referer':'http://93.174.95.27',
}
link = "http://music.163.com/discover/toplist?id=" + choiceX
r = requests.get(link, headers=header)
html = r.content
soup = BeautifulSoup(html, "html.parser")
songs = soup.find("ul", class_="f-hide").select("a", limit=choicelimit)

i = 1

for s in songs:
    song_id = s['href'][9:]
    song_name = s.text
    song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
    print("第 " + str(i) + " 首歌曲:" + song_down_link)
    print("正在下载...")

    response = requests.get(song_down_link, headers=header).content
    f = open(song_name + ".mp3", 'wb')
    f.write(response)
    f.close()
    print("下载完成.\n\r")
    i = i + 1

某位大佬的超级版:

# 网易云音乐批量下载


import sys
import os
import os.path

try:
    import requests
except:
    print("Please use 'pip install requests' or 'pip3 install requests'")
    sys.exit(1)

try:
    from bs4 import BeautifulSoup
except:
    print("Please use 'pip install bs4' or 'pip3 install bs4'")
    sys.exit(1)

useMultiThread = True

try:
    import threading
    try:
        import threadpool
    except:
        print("Please use 'pip install threadpool' or 'pip3 install threadpool'")
except:
    print("You not install threading module, do not use multi thread download")
    useMultiThread = False


header = {	'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
           'Referer': 'http://93.174.95.27',
           }

targets = {
    # '飙升榜': 'https://music.163.com/#/discover/toplist?id=19723756',     # 每天更新
    # '新歌榜': 'https://music.163.com/#/discover/toplist?id=3779629',      # 每天更新
    # '原创榜': 'https://music.163.com/#/discover/toplist?id=2884035',      # 每周四更新
    '热歌榜': 'http://music.163.com/discover/toplist?id=3778678',           # 每日更新
    # 'iTunes榜': 'https://music.163.com/discover/toplist?id=11641012',       # 已失效
    '云音乐电音榜': 'https://music.163.com/discover/toplist?id=1978921795',   # 周五更新
    '云音乐ACG榜': 'https://music.163.com/discover/toplist?id=71385702',      # 每周四更新
    '云音乐ACG动画榜': 'https://music.163.com/discover/toplist?id=3001835560', # 每天更新
}

_max = 0
_min = 0
progress = "#############################"
whitechr = "............................."


def download(index, song, dir):
    song_id = song['href'][9:]
    song_name = song.text
    song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
    global _min 
    global _max

    if os.path.exists("mp3/{}/".format(dir) + song_name.replace("/","_") + ".mp3"):
        # print("文件已经存在.")
        _min = _min + 1
        return

    if not useMultiThread:
        print("第 " + str(index+1) + " 首歌曲:" + song_down_link)

    response = requests.get(song_down_link, headers=header).content

    f = open("mp3/{}/".format(dir) + song_name.replace("/","_") + ".mp3", 'wb')
    f.write(response)
    f.close()

    if os.path.getsize("mp3/{}/".format(dir) + song_name.replace("/","_") + ".mp3") < 200 * 1024:
        os.remove("mp3/{}/".format(dir) + song_name.replace("/","_") + ".mp3")

    # print("第 " + str(index+1) + " 首歌曲:"+song_name+".mp3 下载完成.")
    _min = _min + 1
    cur = _min * (100 / _max)
    lt = len(progress) * (cur/100)
    gt = len(progress) - lt
    print("[{}{}] {}% - {}/{}".format(progress[:int(lt)],whitechr[:int(gt)],int(cur),_min,_max), end="\r")

def GetMusicList(key, target) -> list:
    response = requests.get(target, headers=header)
    html = response.content
    soup = BeautifulSoup(html, "html.parser")
    songs = soup.find("ul", class_="f-hide").select("a")
    args_list = []
    for i in range(len(songs)):
        # 制作闭包用于给download匹配参数
        args_list.append((None, {'index': i, 'song': songs[i], 'dir': key}))

    return args_list


if __name__ == "__main__":
    if not os.path.exists("mp3"):
        os.mkdir("mp3")

    musicList = []

    for (key, target) in targets.items():
        if not os.path.exists("mp3/{}".format(key)):
            os.mkdir("mp3/{}".format(key))
        print(key, target)
        musicList.extend(GetMusicList(key, target))
    
    _max = len(musicList)
    
    if useMultiThread:
        pool = threadpool.ThreadPool(5)  # 设置线程池同时进行的数量
        reqs = threadpool.makeRequests(download, musicList)  # 将进行线程池队列创建和执行
        [pool.putRequest(req) for req in reqs]
        pool.wait()

        sys.exit(0)

    for i in range(len(musicList)):  # 1-100
        # print("第{}首:{}.mp3".format(i+1, songs[i].text))
        download(i, musicList[i], musicList[i][1]['dir'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值