问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用Python爬取网易云音乐歌单内的歌曲

发布网友 发布时间:2022-04-22 11:26

我来回答

2个回答

懂视网 时间:2022-05-10 10:32

本篇文章给大家带来的内容是关于超简单的Python爬虫之网易云音乐的下载,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

目标

偶然的一次机会听到了房东的猫的《云烟成雨》,瞬间迷上了这慵懒的嗓音和学生气的歌词,然后一直去循环听她们的歌。然后还特意去刷了动漫《我是江小白》,好期待第二季...

我多想在见你,哪怕匆匆一眼就别离...

好了,不说废话了。这次的目标主要是根据网易云中歌手的ID,下载该歌手的热门音乐的歌词和音频,并保存到本地的文件夹中。

配置基础

  • Python

  • Selenium(配置方法参照:Selenium配置)

  • Chrome浏览器(其它的也可以,需要进行相应的修改)

  • 分析

    如果爬取过网易云的网站的小伙伴都应该知道网易云是有反爬取机制的,POST时需要对一些信息的参数进行加密函数的模拟。但是这里为了简便,小白也能理解。直接使用了Selenium来模拟登录,然后使用接口来直接下载音乐和歌词。

    实验步骤:

    1. 根据歌手ID获取该歌手的热门歌曲列表,歌曲名称和链接,并保存到csv文件中;

    2. 读取csv文件,根据歌曲链接,提取歌曲ID,然后利用相应的接口,下载音乐和歌词;

    3. 将音乐和歌词保存到本地。

    784947343-5b83affa82021_articlex.png

    Python实现

    该部分将对几个关键的函数进行介绍...

    获取歌手信息

    利用Selenium我们就不需要看对网页的请求了,直接可以从网页源码中提取相应的信息。查看歌手页面源码可以发现,我们需要的信息在iframe框架内,所以我们先需要切换到iframe:

    browser.switch_to.frame('contentFrame')

    继续往下看,发现我们需要的歌曲名字和链接是在id="hotsong-list"的标签中,然后每一行对应的是一个tr标签。所以先获取所有的tr内容,然后遍历单个tr

    data = browser.find_element_by_id("hotsong-list").find_elements_by_tag_name("tr")

    注意:前一个是find_element,后一个是find_elements,后者返回一个列表。

    接下来就是解析单个tr标签的内容,获取歌曲名字和链接,可以发现两者在class="txt"标签中,而且链接是href属性,名字是title属性,可以直接通过get_attribute()函数获取。

    723071854-5b83affa78c11_articlex.png

    for i in range(len(data)):
     content = data[i].find_element_by_class_name("txt")
     href = content.find_element_by_tag_name("a").get_attribute("href")
     title = content.find_element_by_tag_name("b").get_attribute("title")
     song_info.append((title, href))

    下载歌词

    网易云有个获取歌词的接口,链接为:http://music.163.com/api/song...

    链接中的数字就是歌曲的id,所以我们拥有歌曲id后,可以直接从该链接下载歌词,歌词文件是json格式,所以我们需要用到json包。

    3947875761-5b83affa9a593_articlex.png

    而且直接获取的歌词中,每行有一个时间轴,需要用正则表达式来剔除,完整代码如下:

    def get_lyric(self):
     url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(self.song_id) + '&lv=1&kv=1&tv=-1'
     r = requests.get(url)
     json_obj = r.text
     j = json.loads(json_obj)
     lyric = j['lrc']['lyric']
     # 利用正则表达式去除时间轴
     regex = re.compile(r'[.*]')
     final_lyric = re.sub(regex, '', lyric)
     return final_lyric

    下载音频

    网易云也提供了音频文件的接口,链接为:http://music.163.com/song/med...

    链接中的数字为歌曲的id,可以直接根据歌曲的id来下载音频文件。完整代码如下:

    def get_mp3(self):
     url = 'http://music.163.com/song/media/outer/url?id=' + str(self.song_id)+'.mp3'
     try:
     print("正在下载:{0}".format(self.song_name))
     urllib.request.urlretrieve(url, '{0}/{1}.mp3'.format(self.path, self.song_name))
     print("Finish...")
     except:
     print("Fail...")

    热心网友 时间:2022-05-10 07:40

    1首先在浏览器在打开网易云音乐的网页版,并点进一个歌单。
    2.在浏览器的开发者工具审查该页面的元素(一般按f12可以弹出该工具),选择Network,之后选择doc可以简便地找到我们需要的元素。
    注:以下两步第3,第4步主要是为了防止网站的反爬,经过这两步后,基本可以避开网站的反爬,所以如果你爬取的网站没有反爬的话,可以跳过这两步。
    3.查看网页的请求方式--get请求
    4.查看header
    5.在Response中找到我们所需要的元素所在的标签位置(如:我们要爬取的是歌曲,既需要寻找歌曲的名字与其id信息,观察可以发现其中一首歌单中的歌名-moon在类名为“f-hide”的ul标签的li标签的a标签中) ~
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    华润微申购什么时候上市? 老公不带避孕套导致老婆两次打胎说明什么 男友不爱戴套套怎么办? ...中的男人都那么自私自利,只顾自己享受,不用避孕套保护女友,而是经常... 剪下一断苹果枝会长出根来吗 和平精英 和平精英循环脸怎么解决? 和平精英什么情况下弹人脸识别 如何避免触发人脸 Winxp sp2 英文版如何安装补丁 xp64位英文版怎么安装?因为网上只有英文版在64位win7系统运行下有共有... 关于安装英文版XP操作系统 网易云怎么取消别人的登录资格 怎么提取网易云音乐里的中文 打开主机显示器没反应黑屏怎么办 苹果照片有个感叹号怎么弄 苹果手机相册里的视频太久没看了右下角有一个!是什么意思 cad布局视口颜色怎么调整 CAD图层管理器怎么添加视口颜色,视口线型那几栏??? CAD视口中图层的视口颜色要怎么恢复默认 为什么我……,因为我……的仿写句 cad2007视口颜色问题 404 Not Found CAD2012布局里 视口中的背景颜色与视口外的颜色不一样 3DS MAX2016如何自定义视口颜色? 如何调整windows7系统的窗口颜色 CAD 2014 布局视口怎么改成黑色视口 为什么有时候3dsmax的视口配置呈现黑色,更改不了 如何实现CAD图形在不同视口中显示的颜色不一样 cad布局视口里怎么可以设置成灰色而模型里的图颜色不变? 3d max 2014如何把透视视口 视口颜色一直变为纯色 网易云伤感名字怎么取? 网易云音乐怎么提取缓存? oppor15怎么关闭自动更新 oppor15怎么删掉更新包,不想更新系统 如何关闭OPPOr15系统更新提醒? oppor15怎么关闭系统更新 oppor15怎么关闭系统更新 oppo r15怎么关闭系统更新提示,不想升级? 电脑光驱不显示怎么办 oppor15强迫自动升级,请问有什么办法不自动更新吗? 电脑系统从装光驱显示不出来怎么办 电脑光驱显示不出来怎么办 OPPOr15标准版怎么关闭手机系统自动下载与更新? 电脑安装了光驱 为什么显示不出来呀 oppor15x系统更新提醒哪里可以关闭 外置光驱连接在电脑上没有显示是什么原因 oppo手机自动下载软件怎么关闭 电脑为什么不显示光驱盘符? OPPOr15可以设置不在WiFi状态下自动软件更新吗? 系统找不到光驱怎么办 光驱不显示