鱼C论坛

 找回密码
 立即注册
查看: 207|回复: 37

请问有没有爬取优质音乐Mp3的代码示例?

[复制链接]
发表于 2024-5-1 06:46:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问有没有爬取优质音乐Mp3的代码示例?

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-1 06:46:24 | 显示全部楼层
当然可以,以下是一个简单的示例代码,用于爬取网易云音乐上的优质音乐Mp3:
import requests
from bs4 import BeautifulSoup

# 定义要爬取的页面链接
url = 'https://music.163.com/discover/toplist?id=3779629'

# 发送HTTP GET请求获取页面内容
response = requests.get(url)
html = response.text

# 使用BeautifulSoup解析页面
soup = BeautifulSoup(html, 'html.parser')

# 找到包含音乐链接的标签
songs = soup.find_all('a', {'class': 'ico u-icn-3'})

# 遍历每个音乐链接
for song in songs:
    # 提取音乐链接和歌曲名称
    href = song['href']
    name = song['title']
    
    # 构造完整的音乐链接
    mp3_url = 'https://music.163.com' + href

    # 发送HTTP GET请求获取音乐文件
    mp3_response = requests.get(mp3_url)
    
    # 保存音乐文件到本地
    with open(name + '.mp3', 'wb') as f:
        f.write(mp3_response.content)

print('音乐下载完成')

请注意,这只是一个简单的示例,具体的实现方式会因网站结构和反爬措施的不同而有所差异。在实际使用中,你可能还需要考虑一些其他问题,例如如何处理异常、如何设置请求头等。此外,爬取音乐文件需要遵守版权法律法规,确保不侵犯他人的版权。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 06:47:15 | 显示全部楼层
FishC 发表于 2024-5-1 06:46
当然可以,以下是一个简单的示例代码,用于爬取网易云音乐上的优质音乐Mp3:

能不能写成爬取指定歌名的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:47:31 | 显示全部楼层
凊风 发表于 2024-05-01 06:47
能不能写成爬取指定歌名的代码?


当然可以!以下是一个示例代码,用于根据指定的歌名爬取网易云音乐上的优质音乐Mp3:
import requests
from bs4 import BeautifulSoup

# 定义要搜索的歌曲名称
song_name = input("请输入要搜索的歌曲名称:")

# 构造搜索链接
search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'

# 发送HTTP GET请求获取搜索页面内容
response = requests.get(search_url)
html = response.text

# 使用BeautifulSoup解析页面
soup = BeautifulSoup(html, 'html.parser')

# 找到搜索结果中的第一个歌曲链接
song = soup.find('a', {'class': 'tit'})

# 提取歌曲链接和歌曲名称
href = song['href']
name = song.text

# 构造完整的歌曲链接
song_url = 'https://music.163.com' + href

# 发送HTTP GET请求获取歌曲页面内容
song_response = requests.get(song_url)
song_html = song_response.text

# 使用BeautifulSoup解析歌曲页面
song_soup = BeautifulSoup(song_html, 'html.parser')

# 找到包含音乐链接的标签
music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})

# 提取音乐链接
mp3_url = music['data-res-url']

# 发送HTTP GET请求获取音乐文件
mp3_response = requests.get(mp3_url)

# 保存音乐文件到本地
with open(name + '.mp3', 'wb') as f:
    f.write(mp3_response.content)

print('音乐下载完成')

请注意,这只是一个简单的示例,具体的实现方式会因网站结构和反爬措施的不同而有所差异。在实际使用中,你可能还需要考虑一些其他问题,例如如何处理异常、如何设置请求头等。此外,爬取音乐文件需要遵守版权法律法规,确保不侵犯他人的版权。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 06:51:22 | 显示全部楼层
FishC 发表于 2024-5-1 06:47
当然可以!以下是一个示例代码,用于根据指定的歌名爬取网易云音乐上的优质音乐Mp3:

能不能指定保存路径到E:\Temp?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:51:40 | 显示全部楼层
凊风 发表于 2024-05-01 06:51
能不能指定保存路径到E:\Temp?


当然可以!以下是稍作修改的示例代码,用于根据指定的歌名爬取网易云音乐上的优质音乐Mp3,并保存到E:\Temp路径下:

import requests
from bs4 import BeautifulSoup
import os

# 定义要搜索的歌曲名称
song_name = input("请输入要搜索的歌曲名称:")

# 构造搜索链接
search_url = f'[url=https://music.163.com/#/search/m/?s={song_name}&type=1']https://music.163.com/#/search/m/?s={song_name}&type=1'[/url]

# 发送HTTP GET请求获取搜索页面内容
response = requests.get(search_url)
html = response.text

# 使用BeautifulSoup解析页面
soup = BeautifulSoup(html, 'html.parser')

# 找到搜索结果中的第一个歌曲链接
song = soup.find('a', {'class': 'tit'})

# 提取歌曲链接和歌曲名称
href = song['href']
name = song.text

# 构造完整的歌曲链接
song_url = '[url=https://music.163.com']https://music.163.com'[/url] + href

# 发送HTTP GET请求获取歌曲页面内容
song_response = requests.get(song_url)
song_html = song_response.text

# 使用BeautifulSoup解析歌曲页面
song_soup = BeautifulSoup(song_html, 'html.parser')

# 找到包含音乐链接的标签
music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})

# 提取音乐链接
mp3_url = music['href']

# 发送HTTP GET请求获取音乐文件
mp3_response = requests.get(mp3_url)

# 构造保存路径
save_path = 'E:\\Temp\\'
mp3_file = os.path.join(save_path, name + '.mp3')

# 保存音乐文件到指定路径
with open(mp3_file, 'wb') as f:
    f.write(mp3_response.content)

print('音乐下载完成')

在上述代码中,我们通过修改`save_path`变量来指定保存路径为E:\Temp。请确保该路径存在并有写入权限。如果路径不存在,可以提前创建好或者通过代码逻辑进行处理。

希望对你有帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 06:52:54 | 显示全部楼层
FishC 发表于 2024-5-1 06:51
当然可以!以下是稍作修改的示例代码,用于根据指定的歌名爬取网易云音乐上的优质音乐Mp3,并保存到E:\ ...

回复请注意Python格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:53:05 | 显示全部楼层
凊风 发表于 2024-05-01 06:52
回复请注意Python格式


非常抱歉,下面是修正后的Python代码示例,用于根据指定的歌名爬取网易云音乐上的优质音乐Mp3,并保存到E:\Temp路径下:
import requests
from bs4 import BeautifulSoup
import os

# 定义要搜索的歌曲名称
song_name = input("请输入要搜索的歌曲名称:")

# 构造搜索链接
search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'

# 发送HTTP GET请求获取搜索页面内容
response = requests.get(search_url)
html = response.text

# 使用BeautifulSoup解析页面
soup = BeautifulSoup(html, 'html.parser')

# 找到搜索结果中的第一个歌曲链接
song = soup.find('a', {'class': 'tit'})

# 提取歌曲链接和歌曲名称
href = song['href']
name = song.text

# 构造完整的歌曲链接
song_url = 'https://music.163.com' + href

# 发送HTTP GET请求获取歌曲页面内容
song_response = requests.get(song_url)
song_html = song_response.text

# 使用BeautifulSoup解析歌曲页面
song_soup = BeautifulSoup(song_html, 'html.parser')

# 找到包含音乐链接的标签
music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})

# 提取音乐链接
mp3_url = music['data-res-url']

# 发送HTTP GET请求获取音乐文件
mp3_response = requests.get(mp3_url)

# 构造保存路径
save_path = r'E:\Temp'
mp3_file = os.path.join(save_path, name + '.mp3')

# 保存音乐文件到指定路径
with open(mp3_file, 'wb') as f:
    f.write(mp3_response.content)

print('音乐下载完成')

在上述代码中,我们通过修改`save_path`变量来指定保存路径为E:\Temp。请确保该路径存在并有写入权限。如果路径不存在,可以提前创建好或者通过代码逻辑进行处理。

希望对你有帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 06:54:28 | 显示全部楼层
FishC 发表于 2024-5-1 06:53
非常抱歉,下面是修正后的Python代码示例,用于根据指定的歌名爬取网易云音乐上的优质音乐Mp3,并保存 ...

报错:

请输入要搜索的歌曲名称:my love
Traceback (most recent call last):
  File "D:\Python\pythonProject\Music.py", line 22, in <module>
    href = song['href']
           ~~~~^^^^^^^^
TypeError: 'NoneType' object is not subscriptable
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:54:41 | 显示全部楼层
凊风 发表于 2024-05-01 06:54
报错:

请输入要搜索的歌曲名称:my love
Traceba ...


非常抱歉给你带来困扰。这个错误是由于在搜索页面中未找到任何歌曲导致的。为了解决这个问题,我们可以先检查是否成功找到了歌曲链接,如果没有则给出相应的提示。

下面是修改后的代码示例:
import requests
from bs4 import BeautifulSoup
import os

# 定义要搜索的歌曲名称
song_name = input("请输入要搜索的歌曲名称:")

# 构造搜索链接
search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'

# 发送HTTP GET请求获取搜索页面内容
response = requests.get(search_url)
html = response.text

# 使用BeautifulSoup解析页面
soup = BeautifulSoup(html, 'html.parser')

# 找到搜索结果中的第一个歌曲链接
song = soup.find('a', {'class': 'tit'})

# 如果没有找到歌曲链接,则给出提示并退出程序
if song is None:
    print(f"未找到歌曲:{song_name}")
    exit()

# 提取歌曲链接和歌曲名称
href = song['href']
name = song.text

# 构造完整的歌曲链接
song_url = 'https://music.163.com' + href

# 发送HTTP GET请求获取歌曲页面内容
song_response = requests.get(song_url)
song_html = song_response.text

# 使用BeautifulSoup解析歌曲页面
song_soup = BeautifulSoup(song_html, 'html.parser')

# 找到包含音乐链接的标签
music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})

# 提取音乐链接
mp3_url = music['href']

# 发送HTTP GET请求获取音乐文件
mp3_response = requests.get(mp3_url)

# 构造保存路径
save_path = r'E:\Temp'
mp3_file = os.path.join(save_path, name + '.mp3')

# 保存音乐文件到指定路径
with open(mp3_file, 'wb') as f:
    f.write(mp3_response.content)

print('音乐下载完成')

此代码在找不到歌曲链接时会给出提示并退出程序,不会再发生TypeError的错误。希望这次能够解决问题。如果还有其他疑问,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 06:55:46 | 显示全部楼层
FishC 发表于 2024-5-1 06:54
非常抱歉给你带来困扰。这个错误是由于在搜索页面中未找到任何歌曲导致的。为了解决这个问题,我们可以 ...

能不能写成Pyside6 界面样式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:56:04 | 显示全部楼层
凊风 发表于 2024-05-01 06:55
能不能写成Pyside6 界面样式?


当然可以!以下是一个使用PySide6创建界面,并实现音乐下载的示例代码:
import os
import requests
from bs4 import BeautifulSoup
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

class MusicDownloader(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("音乐下载器")
        
        # 创建界面组件
        self.search_label = QLabel("请输入要搜索的歌曲名称:")
        self.search_input = QLineEdit()
        self.download_button = QPushButton("下载")
        
        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.search_label)
        layout.addWidget(self.search_input)
        layout.addWidget(self.download_button)
        
        self.setLayout(layout)
        
        # 绑定按钮点击事件
        self.download_button.clicked.connect(self.download_music)
        
    def download_music(self):
        # 获取输入的歌曲名称
        song_name = self.search_input.text()
        
        # 构造搜索链接
        search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'
        
        # 发送HTTP GET请求获取搜索页面内容
        response = requests.get(search_url)
        html = response.text
        
        # 使用BeautifulSoup解析页面
        soup = BeautifulSoup(html, 'html.parser')
        
        # 找到搜索结果中的第一个歌曲链接
        song = soup.find('a', {'class': 'tit'})
        
        # 如果没有找到歌曲链接,则弹出错误提示框
        if song is None:
            QMessageBox.critical(self, "错误", f"未找到歌曲:{song_name}")
            return
        
        # 提取歌曲链接和歌曲名称
        href = song['href']
        name = song.text
        
        # 构造完整的歌曲链接
        song_url = 'https://music.163.com' + href
        
        # 发送HTTP GET请求获取歌曲页面内容
        song_response = requests.get(song_url)
        song_html = song_response.text
        
        # 使用BeautifulSoup解析歌曲页面
        song_soup = BeautifulSoup(song_html, 'html.parser')
        
        # 找到包含音乐链接的标签
        music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})
        
        # 提取音乐链接
        mp3_url = music['href']
        
        # 发送HTTP GET请求获取音乐文件
        mp3_response = requests.get(mp3_url)
        
        # 弹出保存文件对话框,选择保存路径
        save_path, _ = QFileDialog.getSaveFileName(self, "保存音乐", name + ".mp3", "MP3 Files (*.mp3)")
        
        # 如果用户取消保存,则返回
        if not save_path:
            return
        
        # 保存音乐文件到指定路径
        with open(save_path, 'wb') as f:
            f.write(mp3_response.content)
        
        QMessageBox.information(self, "成功", f"音乐下载完成")
        

if __name__ == "__main__":
    app = QApplication([])
    window = MusicDownloader()
    window.show()
    app.exec()

这个示例代码创建了一个简单的界面,包括一个输入框、一个下载按钮。用户可以在输入框中输入歌曲名称,点击下载按钮即可下载对应的音乐文件。同时,还通过对话框提供了保存文件的选择路径功能。

请注意,由于PySide6需要安装并运行QT相关的库,可以使用pip进行安装:
pip install pyside6

希望对你有帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 06:57:33 | 显示全部楼层
FishC 发表于 2024-5-1 06:56
当然可以!以下是一个使用PySide6创建界面,并实现音乐下载的示例代码:

麻烦指定保存路径为E:\Temp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:57:49 | 显示全部楼层
凊风 发表于 2024-05-01 06:57
麻烦指定保存路径为E:\Temp


非常抱歉,我之前的代码中没有指定保存路径为E:\Temp。下面是修改后的代码示例,使用 PySide6 创建界面,并实现音乐下载并保存到 E:\Temp 目录的功能:
import os
import requests
from bs4 import BeautifulSoup
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

class MusicDownloader(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("音乐下载器")
        
        # 创建界面组件
        self.search_label = QLabel("请输入要搜索的歌曲名称:")
        self.search_input = QLineEdit()
        self.download_button = QPushButton("下载")
        
        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.search_label)
        layout.addWidget(self.search_input)
        layout.addWidget(self.download_button)
        
        self.setLayout(layout)
        
        # 绑定按钮点击事件
        self.download_button.clicked.connect(self.download_music)
        
    def download_music(self):
        # 获取输入的歌曲名称
        song_name = self.search_input.text()
        
        # 构造搜索链接
        search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'
        
        # 发送HTTP GET请求获取搜索页面内容
        response = requests.get(search_url)
        html = response.text
        
        # 使用BeautifulSoup解析页面
        soup = BeautifulSoup(html, 'html.parser')
        
        # 找到搜索结果中的第一个歌曲链接
        song = soup.find('a', {'class': 'tit'})
        
        # 如果没有找到歌曲链接,则弹出错误提示框
        if song is None:
            QMessageBox.critical(self, "错误", f"未找到歌曲:{song_name}")
            return
        
        # 提取歌曲链接和歌曲名称
        href = song['href']
        name = song.text
        
        # 构造完整的歌曲链接
        song_url = 'https://music.163.com' + href
        
        # 发送HTTP GET请求获取歌曲页面内容
        song_response = requests.get(song_url)
        song_html = song_response.text
        
        # 使用BeautifulSoup解析歌曲页面
        song_soup = BeautifulSoup(song_html, 'html.parser')
        
        # 找到包含音乐链接的标签
        music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})
        
        # 提取音乐链接
        mp3_url = music['data-res-url']
        
        # 发送HTTP GET请求获取音乐文件
        mp3_response = requests.get(mp3_url)
        
        # 弹出保存文件对话框,选择保存路径
        save_path = QFileDialog.getSaveFileName(self, '保存音乐', os.path.join('E:', 'Temp', f'{name}.mp3'), 'MP3 Files (*.mp3)')[0]
        
        # 如果用户取消保存,则返回
        if not save_path:
            return
        
        # 保存音乐文件到指定路径
        with open(save_path, 'wb') as f:
            f.write(mp3_response.content)
        
        QMessageBox.information(self, "成功", f"音乐下载完成")

if __name__ == "__main__":
    app = QApplication()
    window = MusicDownloader()
    window.show()
    app.exec()

在该代码中,使用 `os.path.join()` 函数构造了保存路径为 E:\Temp\ 的绝对路径。同时,使用 `QFileDialog.getSaveFileName()` 弹出文件保存对话框,方便用户选择保存路径和文件名。

希望这次能够满足你的需求!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 07:03:21 | 显示全部楼层
FishC 发表于 2024-5-1 06:57
非常抱歉,我之前的代码中没有指定保存路径为E:\Temp。下面是修改后的代码示例,使用 PySide6 创建界面 ...

我手工搜到的歌曲网址是:https://music.163.com/#/song?id=2080607,请问代码要如何修改才能爬取?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 07:03:47 | 显示全部楼层
凊风 发表于 2024-05-01 07:03
我手工搜到的歌曲网址是:https://music.163.com/#/so ...


如果你已经手动获取了歌曲的具体网址,例如 "https://music.163.com/#/song?id=2080607",那么可以按照以下方式修改代码来实现爬取音乐文件:
import requests

# 定义音乐网址
url = 'https://music.163.com/song?id=2080607'

# 获取音乐文件的地址
response = requests.get(url)
html = response.text

# 提取音乐文件的URL
start_pos = html.find('http', html.find('"src":"'))  # 找到音乐文件URL的起始位置
end_pos = html.find('"', start_pos)  # 找到音乐文件URL的结束位置
mp3_url = html[start_pos:end_pos]  # 提取音乐文件的URL

# 发送HTTP GET请求获取音乐文件
mp3_response = requests.get(mp3_url)

# 保存音乐文件到本地
with open('music.mp3', 'wb') as f:
    f.write(mp3_response.content)

print('音乐下载完成')

在上述代码中,我们通过发送 GET 请求来获取指定网址的页面内容,然后从页面内容中提取出音乐文件的 URL。接着,我们再次发送 GET 请求,从该 URL 获取音乐文件的内容,并将其保存到本地。

请注意,该示例代码仅适用于特定的音乐网址结构,不适用于其他情况。如果目标网站结构有所变化,代码可能需要进行相应的调整。

希望对你有所帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 07:04:36 | 显示全部楼层
FishC 发表于 2024-5-1 07:03
如果你已经手动获取了歌曲的具体网址,例如 "https://music.163.com/#/song?id=2080607",那么可以按照 ...

麻烦写成Pyside6界面,然后指定存储路径为E:\Temp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 07:04:49 | 显示全部楼层
凊风 发表于 2024-05-01 07:04
麻烦写成Pyside6界面,然后指定存储路径为E:\Temp


当然可以!以下是修改后的代码示例,使用 PySide6 创建界面,并实现在指定路径(E:\Temp)下下载音乐文件:
import os
import requests
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

class MusicDownloader(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("音乐下载器")
        
        # 创建界面组件
        self.url_label = QLabel("请输入音乐网址:")
        self.url_input = QLineEdit()
        self.download_button = QPushButton("下载")
        
        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.url_label)
        layout.addWidget(self.url_input)
        layout.addWidget(self.download_button)
        
        self.setLayout(layout)
        
        # 绑定按钮点击事件
        self.download_button.clicked.connect(self.download_music)
        
    def download_music(self):
        # 获取输入的音乐网址
        url = self.url_input.text()
        
        # 发送 HTTP GET 请求获取页面内容
        response = requests.get(url)
        html = response.text
        
        # 提取音乐文件的URL
        start_pos = html.find('http', html.find('"src":"'))  # 找到音乐文件 URL 的起始位置
        end_pos = html.find('"', start_pos)  # 找到音乐文件 URL 的结束位置
        mp3_url = html[start_pos:end_pos]  # 提取音乐文件的URL
        
        # 弹出保存文件对话框,选择保存路径
        save_path = QFileDialog.getSaveFileName(self, '保存音乐', os.path.join('E:', 'Temp', 'music.mp3'), 'MP3 Files (*.mp3)')
        
        # 如果用户取消保存,则返回
        if not save_path:
            return
        
        # 发送 HTTP GET 请求获取音乐文件
        mp3_response = requests.get(mp3_url)

        # 保存音乐文件到指定路径
        with open(save_path[0], 'wb') as f:
            f.write(mp3_response.content)
        
        QMessageBox.information(self, "成功", "音乐下载完成")

if __name__ == "__main__":
    app = QApplication()
    window = MusicDownloader()
    window.show()
    app.exec()

在该代码中,我们添加了一个输入框用于输入音乐的具体网址(例如 "https://music.163.com/#/song?id=2080607"),然后通过按钮点击事件的处理函数 `download_music` 来下载音乐文件。同时,使用 `QFileDialog.getSaveFileName()` 弹出文件保存对话框,方便用户选择保存路径和文件名。默认的保存路径为 E:\Temp\music.mp3。

请注意,由于 PySide6 需要安装并运行 QT 相关的库,可以使用 pip 进行安装:
pip install pyside6

希望这次能够满足你的需求!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 07:06:50 | 显示全部楼层
FishC 发表于 2024-5-1 07:04
当然可以!以下是修改后的代码示例,使用 PySide6 创建界面,并实现在指定路径(E:\Temp)下下载音乐文 ...

我录入网址:https://music.163.com/#/song?id=2080607,
然后报错:
Traceback (most recent call last):
  File "D:\Python\pythonProject\Music.py", line 50, in download_music
    mp3_response = requests.get(mp3_url)
                   ^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python\pythonProject\.venv\Lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python\pythonProject\.venv\Lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python\pythonProject\.venv\Lib\site-packages\requests\sessions.py", line 575, in request
    prep = self.prepare_request(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Python\pythonProject\.venv\Lib\site-packages\requests\sessions.py", line 486, in prepare_request
    p.prepare(
  File "D:\Python\pythonProject\.venv\Lib\site-packages\requests\models.py", line 368, in prepare
    self.prepare_url(url, params)
  File "D:\Python\pythonProject\.venv\Lib\site-packages\requests\models.py", line 439, in prepare_url
    raise MissingSchema(
requests.exceptions.MissingSchema: Invalid URL '': No scheme supplied. Perhaps you meant https://?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 07:07:13 | 显示全部楼层
凊风 发表于 2024-05-01 07:06
我录入网址:https://music.163.com/#/song?id=208060 ...


非常抱歉给你带来困扰。这个错误是由于 `mp3_url` 变量未正确获取音乐文件的URL导致的。在你提供的网址中,"https://music.163.com/#/song?id=2080607" 是一个包含了 "#/" 的特殊链接,不适用于直接请求。需要对链接进行处理才能获得有效的音乐文件URL。

以下是修改后的代码示例,将输入的网址进行处理,以获取正确的音乐文件URL:
import os
import requests
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

class MusicDownloader(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("音乐下载器")
        
        # 创建界面组件
        self.url_label = QLabel("请输入音乐网址:")
        self.url_input = QLineEdit()
        self.download_button = QPushButton("下载")
        
        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.url_label)
        layout.addWidget(self.url_input)
        layout.addWidget(self.download_button)
        
        self.setLayout(layout)
        
        # 绑定按钮点击事件
        self.download_button.clicked.connect(self.download_music)
        
    def download_music(self):
        # 获取输入的音乐网址
        url = self.url_input.text()
        
        # 处理音乐网址以获取正确的音乐文件URL
        music_id = url.split('?id=')[1]
        mp3_url = f'https://music.163.com/song/media/outer/url?id={music_id}.mp3'
        
        # 弹出保存文件对话框,选择保存路径
        save_path = QFileDialog.getSaveFileName(self, '保存音乐', os.path.join('E:', 'Temp', 'music.mp3'), 'MP3 Files (*.mp3)')
        
        # 如果用户取消保存,则返回
        if not save_path:
            return
        
        # 发送 HTTP GET 请求获取音乐文件
        mp3_response = requests.get(mp3_url)

        # 保存音乐文件到指定路径
        with open(save_path, 'wb') as f:
            f.write(mp3_response.content)
        
        QMessageBox.information(self, "成功", "音乐下载完成")

if __name__ == "__main__":
    app = QApplication()
    window = MusicDownloader()
    window.show()
    app.exec()

在这个代码中,我们通过对输入的音乐网址进行处理,提取出音乐ID,并构造正确的音乐文件URL(例如 `https://music.163.com/song/media/outer/url?id=2080607.mp3`)。然后,通过发送GET请求获取音乐文件并保存到指定路径。

希望这次能够解决问题。如有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表