鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 凊风

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

[复制链接]
 楼主| 发表于 2024-5-1 07:08:29 | 显示全部楼层
FishC 发表于 2024-5-1 07:07
非常抱歉给你带来困扰。这个错误是由于 `mp3_url` 变量未正确获取音乐文件的URL导致的。在你提供的网址 ...

报错:
Traceback (most recent call last):
  File "D:\Python\pythonProject\Music.py", line 48, in download_music
    with open(save_path, 'wb') as f:
         ^^^^^^^^^^^^^^^^^^^^^
TypeError: expected str, bytes or os.PathLike object, not tuple
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 07:09:47 | 显示全部楼层
凊风 发表于 2024-05-01 07:08
报错:
Traceback (most recent call last):
  File ...


非常抱歉,我之前的代码中出现了错误。这个错误是由于 `save_path` 变量的格式不正确导致的。

下面是修复后的代码示例:
import os
import requests
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QLineEdit, QFileDialog

class MusicDownloader(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("音乐下载")
        self.layout = QVBoxLayout()
        
        self.url_label = QLabel("请输入歌曲网址:")
        self.layout.addWidget(self.url_label)
        
        self.url_input = QLineEdit()
        self.layout.addWidget(self.url_input)
        
        self.path_label = QLabel("请选择存储路径:")
        self.layout.addWidget(self.path_label)
        
        self.path_input = QLineEdit()
        self.layout.addWidget(self.path_input)
        
        self.choose_button = QPushButton("选择路径")
        self.choose_button.clicked.connect(self.choose_path)
        self.layout.addWidget(self.choose_button)
        
        self.download_button = QPushButton("下载")
        self.download_button.clicked.connect(self.download_music)
        self.layout.addWidget(self.download_button)
        
        self.setLayout(self.layout)
    
    def choose_path(self):
        file_dialog = QFileDialog(self)
        file_dialog.setFileMode(QFileDialog.Directory)
        save_path = file_dialog.getExistingDirectory()
        self.path_input.setText(save_path)
    
    def download_music(self):
        music_url = self.url_input.text()
        save_path = self.path_input.text()
        if not music_url or not save_path:
            return
        
        mp3_response = requests.get(music_url)
        mp3_content = mp3_response.content
        
        file_name = music_url.split('/')[-1] + '.mp3'
        file_path = os.path.join(save_path, file_name)
        
        with open(file_path, 'wb') as f:
            f.write(mp3_content)
        
        print("音乐下载完成!")

app = QApplication([])
window = MusicDownloader()
window.show()
app.exec()

这个代码示例创建了一个简单的 PySide6 界面,让用户输入歌曲网址和选择存储路径,然后点击下载按钮进行音乐下载。确保安装了 PySide6 库,并运行代码即可。当音乐下载完成后,会在控制台打印提示信息。

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

使用道具 举报

 楼主| 发表于 2024-5-1 07:11:32 | 显示全部楼层
FishC 发表于 2024-5-1 07:09
非常抱歉,我之前的代码中出现了错误。这个错误是由于 `save_path` 变量的格式不正确导致的。

下面 ...

我录入:https://music.163.com/#/song?id=2080607

然后报错:
Traceback (most recent call last):
  File "D:\Python\pythonProject\Music.py", line 52, in download_music
    with open(file_path, 'wb') as f:
         ^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: 'E:/Temp\\song?id=2080607.mp3'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

...


非常抱歉再次给您带来困扰。这个错误是由于文件路径格式不正确导致的。

下面是修复后的代码示例:
import os
import requests
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QLineEdit, QMessageBox

class MusicDownloader(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("音乐下载器")
        self.setup_ui()

    def setup_ui(self):
        layout = QVBoxLayout()

        self.url_label = QLabel("歌曲链接:")
        layout.addWidget(self.url_label)

        self.url_edit = QLineEdit()
        layout.addWidget(self.url_edit)

        self.save_path_label = QLabel("保存路径:")
        layout.addWidget(self.save_path_label)

        self.save_path_edit = QLineEdit()
        layout.addWidget(self.save_path_edit)

        self.download_button = QPushButton("下载音乐")
        self.download_button.clicked.connect(self.download_music)
        layout.addWidget(self.download_button)

        self.setLayout(layout)

    def download_music(self):
        url = self.url_edit.text()
        save_path = self.save_path_edit.text()

        if not url or not save_path:
            QMessageBox.warning(self, "警告", "请填写完整的歌曲链接和保存路径")
            return

        try:
            response = requests.get(url)
            soup = BeautifulSoup(response.content, 'html.parser')
            song_name = soup.find('meta', property='og:title')['content']
            mp3_url = soup.find('meta', property='og:audio')['content']

            file_path = os.path.join(save_path, f"{song_name}.mp3")
            with open(file_path, 'wb') as f:
                f.write(requests.get(mp3_url).content)

            QMessageBox.information(self, "提示", f"音乐下载完成,保存路径:{file_path}")
        except Exception as e:
            QMessageBox.critical(self, "错误", str(e))

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

在这个示例中,我们使用了 PySide6 创建了一个简单的界面,包含一个输入框和一个按钮。用户在输入框中输入歌曲链接,点击按钮后将会触发下载音乐的操作,并将音乐保存到指定的路径下。请将其中的 `E:/Temp` 改为你希望保存音乐的路径。

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

使用道具 举报

 楼主| 发表于 2024-5-1 07:16:30 | 显示全部楼层
FishC 发表于 2024-5-1 07:09
非常抱歉,我之前的代码中出现了错误。这个错误是由于 `save_path` 变量的格式不正确导致的。

下面 ...

报错:
Traceback (most recent call last):
  File "D:\Python\pythonProject\Music.py", line 52, in download_music
    with open(file_path, 'wb') as f:
         ^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: 'E:/Temp\\song?id=2080607.mp3'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 07:16:44 | 显示全部楼层
凊风 发表于 2024-05-01 07:16
报错:
Traceback (most recent call last):
  File ...


非常抱歉给你带来困扰。这个错误是由于文件路径中包含了无效字符导致的。在Windows系统中,文件名不能包含如`?`等特殊字符。

以下是修正后的代码示例,确保文件名的有效性:
import os
import requests
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

def download_music():
    # 获取输入的网址
    url = input_line.text()

    # 发送请求获取页面内容
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')

    # 找到音乐标签并获取mp3链接
    mp3_url = soup.select_one('audio').get('src')

    # 提取歌曲名称作为保存文件名
    song_name = url.split('=')[-1]
    file_name = f"{song_name}.mp3"

    # 指定保存路径
    save_path = os.path.join("E:\Temp", file_name)

    # 下载音乐
    mp3_response = requests.get(mp3_url)
    with open(save_path, 'wb') as f:
        f.write(mp3_response.content)

# 创建界面
app = QApplication([])
window = QWidget()

layout = QVBoxLayout()
label = QLabel("请输入要下载的音乐网址:")
layout.addWidget(label)

input_line = QLineEdit()
layout.addWidget(input_line)

button = QPushButton("下载音乐")
button.clicked.connect(download_music)
layout.addWidget(button)

window.setLayout(layout)
window.show()

app.exec()

请注意,如果在运行过程中出现`PermissionError: [Errno 13] Permission denied: 'E:/Temp/song?id=2080607.mp3'`错误,请确保目标保存路径`E:\Temp`是存在且可写的。

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

使用道具 举报

 楼主| 发表于 2024-5-1 07:19:42 | 显示全部楼层
FishC 发表于 2024-5-1 07:16
非常抱歉给你带来困扰。这个错误是由于文件路径中包含了无效字符导致的。在Windows系统中,文件名不能 ...

import os
import requests
from bs4 import BeautifulSoup
from PySide6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton, QLineEdit, QFileDialog


def download_music():
    # 获取输入的网址
    url = input_line.text()

    # 发送请求获取页面内容
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')

    # 找到音乐标签并获取mp3链接
    mp3_url = soup.select_one('audio').get('src')

    # 提取歌曲名称作为保存文件名
    song_name = url.split('=')[-1]
    file_name = f"{song_name}.mp3"

    # 指定保存路径
    save_path = os.path.join("E:\Temp", file_name)

    # 下载音乐
    mp3_response = requests.get(mp3_url)
    with open(save_path, 'wb') as f:
        f.write(mp3_response.content)


# 创建界面
app = QApplication([])
window = QWidget()

layout = QVBoxLayout()
label = QLabel("请输入要下载的音乐网址:")
layout.addWidget(label)

input_line = QLineEdit()
layout.addWidget(input_line)

button = QPushButton("下载音乐")
button.clicked.connect(download_music)
layout.addWidget(button)

window.setLayout(layout)
window.show()

app.exec()


报错:
Traceback (most recent call last):
  File "D:\Python\pythonProject\Music.py", line 16, in download_music
    mp3_url = soup.select_one('audio').get('src')
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 07:19:53 | 显示全部楼层
凊风 发表于 2024-05-01 07:19
import os
import requests
from bs4 import Beauti ...


这个错误是因为页面中没有找到 `audio` 标签导致的。可能是因为你提供的网址并不是直接指向音乐的链接。

你可以尝试查看页面源代码,或者使用开发者工具来确定正确的音乐链接。一般来说,应该能在 `<audio>` 标签中找到音乐链接。

另外,你还可以尝试其他方式来获取音乐链接,比如通过分析网页中的 JavaScript 代码。请记住,在爬取数据时,请遵守相关网站的使用规定,并确保您拥有对音乐的合法使用权。

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

使用道具 举报

发表于 2024-5-1 07:58:20 From FishC Mobile | 显示全部楼层
凊风 发表于 2024-5-1 07:19
import os
import requests
from bs4 import BeautifulSoup

这个问题ai是无法帮你的,某云以前是可以爬的,但显然是有加密的,解析加密ai是不可能会的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 09:21:59 | 显示全部楼层
凊风 发表于 2024-5-1 07:19
import os
import requests
from bs4 import BeautifulSoup

之前写过很多,但都失效了
看看五一假期能不能再写个

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
python爱好者. + 5 + 5 + 3 鱼C有你更精彩 ^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2024-5-1 15:39:19 | 显示全部楼层
青出于蓝 发表于 2024-5-1 09:21
之前写过很多,但都失效了
看看五一假期能不能再写个

先谢谢了
恳请能够按“歌手”、“歌名”或者“歌词”来搜索Mp3或者Mtv,连对应的歌词也一并下载下来储存到指定的路径就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 15:41:44 | 显示全部楼层
青出于蓝 发表于 2024-5-1 09:21
之前写过很多,但都失效了
看看五一假期能不能再写个

刚刚我在网上找了一段,可以下载mp3,但歌词不知道为什么没能保存下来。
import os
import re
import json
import requests
from lxml import etree


def download_songs(url=None):
    if url is None:
        # url = 'https://music.163.com/#/playlist?id=2384642500'
        url = 'https://music.163.com/#/artist?id=45839'

    url = url.replace('/#', '').replace('https', 'http')  # 对字符串进行去空格和转协议处理
    # 网易云音乐外链url接口:http://music.163.com/song/media/outer/url?id=xxxx
    out_link = 'http://music.163.com/song/media/outer/url?id='
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Referer': 'https://music.163.com/',
        'Host': 'music.163.com'
    }
    # 请求页面的源码
    res = requests.get(url=url, headers=headers).text

    tree = etree.HTML(res)
    # 音乐列表
    song_list = tree.xpath('//ul[@class="f-hide"]/li/a')
    # 如果是歌手页面
    artist_name_tree = tree.xpath('//h2[@id="artist-name"]/text()')
    artist_name = str(artist_name_tree[0]) if artist_name_tree else None

    # 如果是歌单页面:
    #song_list_tree = tree.xpath('//*[@id="m-playlist"]/div[1]/div/div/div[2]/div[2]/div/div[1]/table/tbody')
    song_list_name_tree = tree.xpath('//h2[contains(@class,"f-ff2")]/text()')
    song_list_name = str(song_list_name_tree[0]) if song_list_name_tree else None

    # 设置音乐下载的文件夹为歌手名字或歌单名
    folder = './' + artist_name if artist_name else './' + song_list_name

    if not os.path.exists(folder):
        os.mkdir(folder)

    for i, s in enumerate(song_list):
        href = str(s.xpath('./@href')[0])
        song_id = href.split('=')[-1]
        src = out_link + song_id  # 拼接获取音乐真实的src资源值
        title = str(s.xpath('./text()')[0])  # 音乐的名字
        filename = title + '.mp3'
        filepath = folder + '/' + filename
        print('开始下载第{}首音乐:{}\n'.format(i + 1, filename))

        try:  # 下载音乐
            #下载歌词
            download_lyric(title, song_id)

            data = requests.get(src).content  # 音乐的二进制数据

            with open(filepath, 'wb') as f:
                f.write(data)
        except Exception as e:
            print(e)

    print('{}首全部歌曲已经下载完毕!'.format(len(song_list)))


def download_lyric(song_name, song_id):
    url = 'http://music.163.com/api/song/lyric?id={}&lv=-1&kv=-1&tv=-1'.format(song_id)
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Referer': 'https://music.163.com/',
        'Host': 'music.163.com'
        # 'Origin': 'https://music.163.com'
    }
    # 请求页面的源码
    res = requests.get(url=url, headers=headers).text
    json_obj = json.loads(res)
    lyric = json_obj['lrc']['lyric']
    reg = re.compile(r'\[.*\]')
    lrc_text = re.sub(reg, '', lyric).strip()

    print(song_name, lrc_text)



if __name__ == '__main__':
    # music_list = 'https://music.163.com/#/playlist?id=689440333' #歌曲清单
    music_list = 'https://music.163.com/#/artist?id=45839' #歌手排行榜
    # music_list = 'https://music.163.com/#/search/m/?order=hot&cat=全部&limit=435&offset=435&s=梁静茹' #搜索列表
    download_songs(music_list)


并且这位老兄没写成Pyside6界面,感觉不太方便^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-1 15:45:01 | 显示全部楼层
FishC 发表于 2024-5-1 07:16
非常抱歉给你带来困扰。这个错误是由于文件路径中包含了无效字符导致的。在Windows系统中,文件名不能 ...

刚刚我在网上找了一段,可以下载mp3,但歌词不知道为什么没能保存下来。
import os
import re
import json
import requests
from lxml import etree


def download_songs(url=None):
    if url is None:
        # url = 'https://music.163.com/#/playlist?id=2384642500'
        url = 'https://music.163.com/#/artist?id=45839'

    url = url.replace('/#', '').replace('https', 'http')  # 对字符串进行去空格和转协议处理
    # 网易云音乐外链url接口:http://music.163.com/song/media/outer/url?id=xxxx
    out_link = 'http://music.163.com/song/media/outer/url?id='
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Referer': 'https://music.163.com/',
        'Host': 'music.163.com'
    }
    # 请求页面的源码
    res = requests.get(url=url, headers=headers).text

    tree = etree.HTML(res)
    # 音乐列表
    song_list = tree.xpath('//ul[@class="f-hide"]/li/a')
    # 如果是歌手页面
    artist_name_tree = tree.xpath('//h2[@id="artist-name"]/text()')
    artist_name = str(artist_name_tree[0]) if artist_name_tree else None

    # 如果是歌单页面:
    #song_list_tree = tree.xpath('//*[@id="m-playlist"]/div[1]/div/div/div[2]/div[2]/div/div[1]/table/tbody')
    song_list_name_tree = tree.xpath('//h2[contains(@class,"f-ff2")]/text()')
    song_list_name = str(song_list_name_tree[0]) if song_list_name_tree else None

    # 设置音乐下载的文件夹为歌手名字或歌单名
    folder = './' + artist_name if artist_name else './' + song_list_name

    if not os.path.exists(folder):
        os.mkdir(folder)

    for i, s in enumerate(song_list):
        href = str(s.xpath('./@href')[0])
        song_id = href.split('=')[-1]
        src = out_link + song_id  # 拼接获取音乐真实的src资源值
        title = str(s.xpath('./text()')[0])  # 音乐的名字
        filename = title + '.mp3'
        filepath = folder + '/' + filename
        print('开始下载第{}首音乐:{}\n'.format(i + 1, filename))

        try:  # 下载音乐
            #下载歌词
            download_lyric(title, song_id)

            data = requests.get(src).content  # 音乐的二进制数据

            with open(filepath, 'wb') as f:
                f.write(data)
        except Exception as e:
            print(e)

    print('{}首全部歌曲已经下载完毕!'.format(len(song_list)))


def download_lyric(song_name, song_id):
    url = 'http://music.163.com/api/song/lyric?id={}&lv=-1&kv=-1&tv=-1'.format(song_id)
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Referer': 'https://music.163.com/',
        'Host': 'music.163.com'
        # 'Origin': 'https://music.163.com'
    }
    # 请求页面的源码
    res = requests.get(url=url, headers=headers).text
    json_obj = json.loads(res)
    lyric = json_obj['lrc']['lyric']
    reg = re.compile(r'
.&#8727;
')
    lrc_text = re.sub(reg, '', lyric).strip()

    print(song_name, lrc_text)



if __name__ == '__main__':
    # music_list = 'https://music.163.com/#/playlist?id=689440333' #歌曲清单
    music_list = 'https://music.163.com/#/artist?id=45839' #歌手排行榜
    # music_list = 'https://music.163.com/#/search/m/?order=hot&cat=全部&limit=435&offset=435&s=梁静茹' #搜索列表
    download_songs(music_list)


并且这位老兄没写成Pyside6界面,感觉不太方便^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 15:45:14 | 显示全部楼层
凊风 发表于 2024-05-01 15:45
刚刚我在网上找了一段,可以下载mp3,但歌词不知道为什 ...


感谢提供代码示例。这段代码主要是爬取网易云音乐上的歌曲,并且同时下载歌曲和歌词。

但是需要注意,该代码中的URL链接是错误的,不能直接访问到具体的歌曲列表或歌手页面。你可以根据具体的需求,修改`music_list`变量的值为你想要下载的歌单、歌手排行榜或搜索列表的URL。

另外,你也可以在代码中添加一些判断逻辑,以便在页面请求或解析失败时给出相应的提示信息。

至于Pyside6界面的编写,确实这段代码并没有使用到图形界面库。如果你希望将爬虫与界面结合起来,可以使用Pyside6创建一个GUI界面,然后调用适当的函数来触发爬取操作。你可以参考之前我给出的示例,根据自己的需求进行修改和扩展。

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

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

使用道具 举报

 楼主| 发表于 2024-5-1 17:44:05 | 显示全部楼层
FishC 发表于 2024-5-1 15:45
感谢提供代码示例。这段代码主要是爬取网易云音乐上的歌曲,并且同时下载歌曲和歌词。

但是需要注意 ...

请问 print(song_name, lrc_text)能够打印出来的歌词如何储存在与song_name对应的Txt中?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-1 17:44:21 | 显示全部楼层
凊风 发表于 2024-05-01 17:44
请问 print(song_name, lrc_text)能够打印出来的歌词 ...


要将歌词保存到与歌曲名称对应的文本文件中,可以在 `download_lyric` 函数中添加保存歌词的代码。以下是修改后的 `download_lyric` 函数示例:
def download_lyric(song_name, song_id):
    url = 'http://music.163.com/api/song/lyric?id={}&lv=-1&kv=-1&tv=-1'.format(song_id)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Referer': 'https://music.163.com/',
        'Host': 'music.163.com'
    }
    res = requests.get(url=url, headers=headers).text
    json_obj = json.loads(res)
    lyric = json_obj.get('lrc', {}).get('lyric')  # 获取歌词文本
    reg = re.compile(r'\[.*?\]')
    lrc_text = re.sub(reg, '', lyric).strip()

    print(song_name, lrc_text)

    # 将歌词保存到文本文件中
    file_path = './lyrics/{}.txt'.format(song_name)
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(lrc_text)

在这个示例中,我将歌词保存到了一个名为 `lyrics` 的文件夹中,并根据歌曲名称创建了相应的文本文件。您也可以根据需要修改保存路径。请确保在运行代码之前,已经创建好了该文件夹。

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

使用道具 举报

 楼主| 发表于 2024-5-1 17:52:13 | 显示全部楼层
FishC 发表于 2024-5-1 17:44
要将歌词保存到与歌曲名称对应的文本文件中,可以在 `download_lyric` 函数中添加保存歌词的代码。以下 ...

没有找到lyrics文件夹。。。。

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

使用道具 举报

发表于 2024-5-1 17:52:28 | 显示全部楼层
凊风 发表于 2024-05-01 17:52
没有找到lyrics文件夹。。。。

请问能不能指定到E: ...


当然可以!以下是修改后的代码示例,可以将歌词保存到 `E:\Temp\lyrics` 文件夹中:

import os
import re
import json
import requests
from lxml import etree

LYRICS_FOLDER = 'E:/Temp/lyrics'

def download_songs(url=None):
    if url is None:
        url = '[url=https://music.163.com/#/artist?id=45839']https://music.163.com/#/artist?id=45839'[/url]

    # 其他代码省略...
   
def download_lyric(song_name, song_id):
    url = '[url=http://music.163.com/api/song/lyric?id={}&lv=-1&kv=-1&tv=-1'.format(song_id)]http://music.163.com/api/song/lyric?id={}&lv=-1&kv=-1&tv=-1'.format(song_id)[/url]
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Referer': '[url=https://music.163.com/',]https://music.163.com/',[/url]
        'Host': 'music.163.com'
    }
    res = requests.get(url=url, headers=headers).text
    json_obj = json.loads(res)

    if 'lrc' in json_obj and 'lyric' in json_obj['lrc']:
        lyric = json_obj['lrc']['lyric']
        reg = re.compile(r'\[.*\]')
        lrc_text = re.sub(reg, '', lyric).strip()

        filename = '{}.txt'.format(song_name)
        filepath = os.path.join(LYRICS_FOLDER, filename)

        with open(filepath, 'w', encoding='utf-8') as f:
            f.write(lrc_text)

        print('歌曲名:{},歌词已保存到文件:{}'.format(song_name, filename))


if __name__ == '__main__':
    if not os.path.exists(LYRICS_FOLDER):
        os.makedirs(LYRICS_FOLDER)

    download_songs()

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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