Python根据歌曲id爬取网易云音乐歌词

在使用requests爬取网易云音乐的歌词时,直接爬取该网页的url,再经过bs4一顿解析后,你会发现,你找不到你想要的歌词,这是因为,网易云音乐内部并不是直接把歌词和音乐挂载在网页上的,而是通过内部的阿贾克斯请求获取歌词的。因此我们可以调取网易云内部的API得到数据包,用json来解析之,便可以获取我们想要的歌词了。

下面只是给出最关键的函数,后续细枝末节的处理就不写了,相信都这篇文章的同学应该都会:

def get_lyric(song_id):
    headers = {
        "user-agent" : "Mozilla/5.0",
        "Referer" : "http://music.163.com",
        "Host" : "music.163.com"
    }
    if not isinstance(song_id, str):
        song_id = str(song_id)
    url = f"http://music.163.com/api/song/lyric?id={song_id}+&lv=1&tv=-1"
    r = requests.get(url, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    json_obj = json.loads(r.text)
    return json_obj["lrc"]["lyric"]

最关键的也就在于url = f"http://music.163.com/api/song/lyric?id={song_id}+&lv=1&tv=-1"这一句。

有了函数后,我们查看想要爬取的歌曲的id:
在这里插入图片描述
调用函数,输入的参数为歌曲的id:

lyric = get_lyric(1805114540)
print(lyric)

out:

[00:00.000] 作词 : ACAね
[00:00.359] 作曲 : ACAね
[00:00.718]正しくなれない 霧が毒をみた
[00:05.316]片っ端から確かめたくて
[00:09.130]考え続けたい
[00:11.037]偽りで出会えた 僕らは何一つも
[00:16.705]奪われてないから
[00:20.049]
[00:27.468]僕ら育ってゆくみたい 愛されるみたい
[00:32.980]暖かな波を読む
[00:35.592]今日を 今を選ぶ 澄んだ朝色
[00:40.895]尋ねる声で何度でも
[00:43.664]僕ら嘘つきだね、両想いだね
[00:48.914]枯れ果てるまで泣き笑い
[00:51.762]今日を 受け入れてゆく
[00:55.001]喜びあった日々を 忘れはしないけど
[01:01.322]知らない方が幸せだって
[01:05.319]知れば 知り得るほど
[01:11.824]正しくなれない 霧が毒をみた
[01:16.421]片っ端から確かめたくて
[01:20.000]考え続けたい
[01:21.959]偽りで出会えた 僕らは何一つも
[01:27.445]奪われてないから
[01:31.755]
[01:35.961]今 心を閉ざさぬように
[01:39.435]腰眈々と 訓練を続けよ
[01:42.544]枯れ木に 笑顔だけ
[01:44.790]君の肉体 本心全て
[01:48.996]無駄になんかさせないよ
[01:52.914]ねぇ、知り得る方が幸せだって
[01:57.773]辿り着いてもいい?
[02:03.938]君だけが見る 夕焼け風鏡
[02:08.771]僕でもいつか 解る日まで
[02:12.375]考え続けたい
[02:14.413]偽りで出会えた 撓る枝分かれよ
[02:19.716]導かれ
[02:21.179]大したもんじゃない 無駄なもんじゃない
[02:24.444]視野は脳裏を 寛大にしていくように
[02:29.094]ずっと もうずっと 茶化されようが
[02:34.162]折れない砂の罠
[02:36.486]可能性が 見逃せるならば
[02:43.801]可能性を 諦められないから
[02:51.063]未だ
[02:54.903]正しくなれない 霧が毒をみた
[03:01.251]片っ端から確かめたくて
[03:04.803]考え続けたい
[03:06.762]偽りで出会えた 僕らは何一つも
[03:13.136]全て嫌われても
[03:16.297]奪われてないから

可以看到,时间和歌词都出来了,你可以分割或者其他随便什么处理,处理完后扔到文件里去就完成歌词的爬取了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值