资讯专栏INFORMATION COLUMN

小白都懂的Python爬虫之网易云音乐下载

SoapEye / 2065人阅读

摘要:完整代码如下正在下载根据网易云歌曲的直接下载歌曲上安装爬取网易云歌曲源码地址

首发知乎:https://zhuanlan.zhihu.com/p/...

目标

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

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

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

配置基础

Python

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

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

分析

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

实验步骤

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

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

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

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()函数获取。

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包。

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

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...")

Reference

python 根据网易云歌曲的ID 直接下载歌曲

Windows上安装Selenium爬取网易云歌曲

源码地址

Github:Link

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42307.html

相关文章

  • 浅谈机器学习入门实践

    摘要:机器学习的过程机器学习的流程可以概括为几大部分,分别是设置数据集划分训练集和测试集构建计算网络训练模型测试模型以及其他一些环节。机器学习在某些时候,很接近于线性回归,而这个库很适合用来创建大量的数字集合。 网上关于机器学习的文章,视频不计其数,本来写这么一篇东西,我自己也觉得有点多余,但是我还真没找到一个能帮助像我这样零基础的人,快速接触和上手机器学习的文章。这篇文章不能让你深入学习和...

    AlienZHOU 评论0 收藏0
  • 爬虫 - 收藏集 - 掘金

    摘要:在这之前,还是有必要对一些概念超轻量级反爬虫方案后端掘金前言爬虫和反爬虫日益成为每家公司的标配系统。 爬虫修炼之道——从网页中提取结构化数据并保存(以爬取糗百文本板块所有糗事为例) - 后端 - 掘金欢迎大家关注我的专题:爬虫修炼之道 上篇 爬虫修炼之道——编写一个爬取多页面的网络爬虫主要讲解了如何使用python编写一个可以下载多页面的爬虫,如何将相对URL转为绝对URL,如何限速,...

    1fe1se 评论0 收藏0
  • Python爬虫网易音乐歌曲下载

    摘要:爬虫之网易云音乐下载目标用根据网易云音乐的,下载音乐,保存到本地格式可以下载歌曲的范围所有能够听的歌曲配置基础模块可选可选这是哈希函数如和和各种加密算法,,,等的集合。 Python爬虫之网易云音乐下载 目标 用Python根据网易云音乐的ID,下载音乐,保存到本地MP3格式 可以下载歌曲的范围:所有能够听的歌曲 配置基础 Python 3.5 模块 pycrypto base64 ...

    enrecul101 评论0 收藏0
  • 我的 Python 高效学习法

    摘要:我最开始学习编程的时候也是如此,摸索了非常久的时间,才慢慢找到自己高效学习方法。被动的学习方式听讲阅读视听演示,只能让你做到内容留存率的和的知识。而主动的学习方式,如通过讨论实践教授给他人,会将原来被动学习的内容留存率从提升到和。 showImg(https://segmentfault.com/img/remote/1460000016856679); 阅读文本大概需要 7 分钟。 ...

    MyFaith 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<