鱼C论坛

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

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

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

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

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

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

本帖被以下淘专辑推荐:

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

使用道具 举报

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

  1. import requests
  2. from bs4 import BeautifulSoup

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

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

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

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

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

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

  26. 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:

  1. import requests
  2. from bs4 import BeautifulSoup

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

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

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

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

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

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

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

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

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

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

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

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

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

  33. 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路径下:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import os

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  37. 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 ...


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

下面是修改后的代码示例:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import os

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  41. 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创建界面,并实现音乐下载的示例代码:

  1. import os
  2. import requests
  3. from bs4 import BeautifulSoup
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

  5. class MusicDownloader(QWidget):
  6.     def __init__(self):
  7.         super().__init__()
  8.         self.setWindowTitle("音乐下载器")
  9.         
  10.         # 创建界面组件
  11.         self.search_label = QLabel("请输入要搜索的歌曲名称:")
  12.         self.search_input = QLineEdit()
  13.         self.download_button = QPushButton("下载")
  14.         
  15.         # 布局
  16.         layout = QVBoxLayout()
  17.         layout.addWidget(self.search_label)
  18.         layout.addWidget(self.search_input)
  19.         layout.addWidget(self.download_button)
  20.         
  21.         self.setLayout(layout)
  22.         
  23.         # 绑定按钮点击事件
  24.         self.download_button.clicked.connect(self.download_music)
  25.         
  26.     def download_music(self):
  27.         # 获取输入的歌曲名称
  28.         song_name = self.search_input.text()
  29.         
  30.         # 构造搜索链接
  31.         search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'
  32.         
  33.         # 发送HTTP GET请求获取搜索页面内容
  34.         response = requests.get(search_url)
  35.         html = response.text
  36.         
  37.         # 使用BeautifulSoup解析页面
  38.         soup = BeautifulSoup(html, 'html.parser')
  39.         
  40.         # 找到搜索结果中的第一个歌曲链接
  41.         song = soup.find('a', {'class': 'tit'})
  42.         
  43.         # 如果没有找到歌曲链接,则弹出错误提示框
  44.         if song is None:
  45.             QMessageBox.critical(self, "错误", f"未找到歌曲:{song_name}")
  46.             return
  47.         
  48.         # 提取歌曲链接和歌曲名称
  49.         href = song['href']
  50.         name = song.text
  51.         
  52.         # 构造完整的歌曲链接
  53.         song_url = 'https://music.163.com' + href
  54.         
  55.         # 发送HTTP GET请求获取歌曲页面内容
  56.         song_response = requests.get(song_url)
  57.         song_html = song_response.text
  58.         
  59.         # 使用BeautifulSoup解析歌曲页面
  60.         song_soup = BeautifulSoup(song_html, 'html.parser')
  61.         
  62.         # 找到包含音乐链接的标签
  63.         music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})
  64.         
  65.         # 提取音乐链接
  66.         mp3_url = music['href']
  67.         
  68.         # 发送HTTP GET请求获取音乐文件
  69.         mp3_response = requests.get(mp3_url)
  70.         
  71.         # 弹出保存文件对话框,选择保存路径
  72.         save_path, _ = QFileDialog.getSaveFileName(self, "保存音乐", name + ".mp3", "MP3 Files (*.mp3)")
  73.         
  74.         # 如果用户取消保存,则返回
  75.         if not save_path:
  76.             return
  77.         
  78.         # 保存音乐文件到指定路径
  79.         with open(save_path, 'wb') as f:
  80.             f.write(mp3_response.content)
  81.         
  82.         QMessageBox.information(self, "成功", f"音乐下载完成")
  83.         

  84. if __name__ == "__main__":
  85.     app = QApplication([])
  86.     window = MusicDownloader()
  87.     window.show()
  88.     app.exec()
复制代码


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

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

  1. 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 目录的功能:

  1. import os
  2. import requests
  3. from bs4 import BeautifulSoup
  4. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

  5. class MusicDownloader(QWidget):
  6.     def __init__(self):
  7.         super().__init__()
  8.         self.setWindowTitle("音乐下载器")
  9.         
  10.         # 创建界面组件
  11.         self.search_label = QLabel("请输入要搜索的歌曲名称:")
  12.         self.search_input = QLineEdit()
  13.         self.download_button = QPushButton("下载")
  14.         
  15.         # 布局
  16.         layout = QVBoxLayout()
  17.         layout.addWidget(self.search_label)
  18.         layout.addWidget(self.search_input)
  19.         layout.addWidget(self.download_button)
  20.         
  21.         self.setLayout(layout)
  22.         
  23.         # 绑定按钮点击事件
  24.         self.download_button.clicked.connect(self.download_music)
  25.         
  26.     def download_music(self):
  27.         # 获取输入的歌曲名称
  28.         song_name = self.search_input.text()
  29.         
  30.         # 构造搜索链接
  31.         search_url = f'https://music.163.com/#/search/m/?s={song_name}&type=1'
  32.         
  33.         # 发送HTTP GET请求获取搜索页面内容
  34.         response = requests.get(search_url)
  35.         html = response.text
  36.         
  37.         # 使用BeautifulSoup解析页面
  38.         soup = BeautifulSoup(html, 'html.parser')
  39.         
  40.         # 找到搜索结果中的第一个歌曲链接
  41.         song = soup.find('a', {'class': 'tit'})
  42.         
  43.         # 如果没有找到歌曲链接,则弹出错误提示框
  44.         if song is None:
  45.             QMessageBox.critical(self, "错误", f"未找到歌曲:{song_name}")
  46.             return
  47.         
  48.         # 提取歌曲链接和歌曲名称
  49.         href = song['href']
  50.         name = song.text
  51.         
  52.         # 构造完整的歌曲链接
  53.         song_url = 'https://music.163.com' + href
  54.         
  55.         # 发送HTTP GET请求获取歌曲页面内容
  56.         song_response = requests.get(song_url)
  57.         song_html = song_response.text
  58.         
  59.         # 使用BeautifulSoup解析歌曲页面
  60.         song_soup = BeautifulSoup(song_html, 'html.parser')
  61.         
  62.         # 找到包含音乐链接的标签
  63.         music = song_soup.find('a', {'class': 'u-btni u-btni-addply f-fl'})
  64.         
  65.         # 提取音乐链接
  66.         mp3_url = music['data-res-url']
  67.         
  68.         # 发送HTTP GET请求获取音乐文件
  69.         mp3_response = requests.get(mp3_url)
  70.         
  71.         # 弹出保存文件对话框,选择保存路径
  72.         save_path = QFileDialog.getSaveFileName(self, '保存音乐', os.path.join('E:', 'Temp', f'{name}.mp3'), 'MP3 Files (*.mp3)')[0]
  73.         
  74.         # 如果用户取消保存,则返回
  75.         if not save_path:
  76.             return
  77.         
  78.         # 保存音乐文件到指定路径
  79.         with open(save_path, 'wb') as f:
  80.             f.write(mp3_response.content)
  81.         
  82.         QMessageBox.information(self, "成功", f"音乐下载完成")

  83. if __name__ == "__main__":
  84.     app = QApplication()
  85.     window = MusicDownloader()
  86.     window.show()
  87.     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",那么可以按照以下方式修改代码来实现爬取音乐文件:

  1. import requests

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

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

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

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

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

  16. 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)下下载音乐文件:

  1. import os
  2. import requests
  3. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

  4. class MusicDownloader(QWidget):
  5.     def __init__(self):
  6.         super().__init__()
  7.         self.setWindowTitle("音乐下载器")
  8.         
  9.         # 创建界面组件
  10.         self.url_label = QLabel("请输入音乐网址:")
  11.         self.url_input = QLineEdit()
  12.         self.download_button = QPushButton("下载")
  13.         
  14.         # 布局
  15.         layout = QVBoxLayout()
  16.         layout.addWidget(self.url_label)
  17.         layout.addWidget(self.url_input)
  18.         layout.addWidget(self.download_button)
  19.         
  20.         self.setLayout(layout)
  21.         
  22.         # 绑定按钮点击事件
  23.         self.download_button.clicked.connect(self.download_music)
  24.         
  25.     def download_music(self):
  26.         # 获取输入的音乐网址
  27.         url = self.url_input.text()
  28.         
  29.         # 发送 HTTP GET 请求获取页面内容
  30.         response = requests.get(url)
  31.         html = response.text
  32.         
  33.         # 提取音乐文件的URL
  34.         start_pos = html.find('http', html.find('"src":"'))  # 找到音乐文件 URL 的起始位置
  35.         end_pos = html.find('"', start_pos)  # 找到音乐文件 URL 的结束位置
  36.         mp3_url = html[start_pos:end_pos]  # 提取音乐文件的URL
  37.         
  38.         # 弹出保存文件对话框,选择保存路径
  39.         save_path = QFileDialog.getSaveFileName(self, '保存音乐', os.path.join('E:', 'Temp', 'music.mp3'), 'MP3 Files (*.mp3)')
  40.         
  41.         # 如果用户取消保存,则返回
  42.         if not save_path:
  43.             return
  44.         
  45.         # 发送 HTTP GET 请求获取音乐文件
  46.         mp3_response = requests.get(mp3_url)

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

  52. if __name__ == "__main__":
  53.     app = QApplication()
  54.     window = MusicDownloader()
  55.     window.show()
  56.     app.exec()
复制代码


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

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

  1. 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:

  1. import os
  2. import requests
  3. from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton, QMessageBox, QFileDialog

  4. class MusicDownloader(QWidget):
  5.     def __init__(self):
  6.         super().__init__()
  7.         self.setWindowTitle("音乐下载器")
  8.         
  9.         # 创建界面组件
  10.         self.url_label = QLabel("请输入音乐网址:")
  11.         self.url_input = QLineEdit()
  12.         self.download_button = QPushButton("下载")
  13.         
  14.         # 布局
  15.         layout = QVBoxLayout()
  16.         layout.addWidget(self.url_label)
  17.         layout.addWidget(self.url_input)
  18.         layout.addWidget(self.download_button)
  19.         
  20.         self.setLayout(layout)
  21.         
  22.         # 绑定按钮点击事件
  23.         self.download_button.clicked.connect(self.download_music)
  24.         
  25.     def download_music(self):
  26.         # 获取输入的音乐网址
  27.         url = self.url_input.text()
  28.         
  29.         # 处理音乐网址以获取正确的音乐文件URL
  30.         music_id = url.split('?id=')[1]
  31.         mp3_url = f'https://music.163.com/song/media/outer/url?id={music_id}.mp3'
  32.         
  33.         # 弹出保存文件对话框,选择保存路径
  34.         save_path = QFileDialog.getSaveFileName(self, '保存音乐', os.path.join('E:', 'Temp', 'music.mp3'), 'MP3 Files (*.mp3)')
  35.         
  36.         # 如果用户取消保存,则返回
  37.         if not save_path:
  38.             return
  39.         
  40.         # 发送 HTTP GET 请求获取音乐文件
  41.         mp3_response = requests.get(mp3_url)

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

  47. if __name__ == "__main__":
  48.     app = QApplication()
  49.     window = MusicDownloader()
  50.     window.show()
  51.     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-5-22 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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