您现在的位置是:网站首页>Python编程Python编程

超简单的Python爬虫之网易云音乐的下载

少儿编程网2020-02-15 19:01:42Python编程 人已围观 来源:少儿编程 -用户投稿

简介本篇文章给大家带来的内容是关于超简单的Python爬虫之网易云音乐的下载,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。目标偶然的一次机会听到了房东的猫的《云烟成雨》,瞬间迷上了这慵懒的嗓音和学生气的歌词,然后一直去循环听她们的歌。然后还特意去刷了动漫《我是江小白》,好期待第二季..

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

 aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

目标

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

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

好了,不说废话了。这次的目标主要是根据网易云中歌手的ID,下载该歌手的热门音乐的歌词和音频,并保存到本地的文件夹中。aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

配置基础

  • PythonaK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

  • Selenium(配置方法参照:Selenium配置)aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

  • Chrome浏览器(其它的也可以,需要进行相应的修改)aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

分析

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

实验步骤aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

  1. 根据歌手ID获取该歌手的热门歌曲列表,歌曲名称和链接,并保存到csv文件中;aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

  2. 读取csv文件,根据歌曲链接,提取歌曲ID,然后利用相应的接口,下载音乐和歌词;aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

  3. 将音乐和歌词保存到本地。aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

784947343-5b83affa82021_articlex.pngaK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Python实现

该部分将对几个关键的函数进行介绍...aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

获取歌手信息

利用Selenium我们就不需要看对网页的请求了,直接可以从网页源码中提取相应的信息。查看歌手页面源码可以发现,我们需要的信息在iframe框架内,所以我们先需要切换到iframe:aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

browser.switch_to.frame('contentFrame')

继续往下看,发现我们需要的歌曲名字和链接是在id="hotsong-list"的标签中,然后每一行对应的是一个tr标签。所以先获取所有的tr内容,然后遍历单个traK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

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

注意:前一个是find_element,后一个是find_elements,后者返回一个列表。aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

接下来就是解析单个tr标签的内容,获取歌曲名字和链接,可以发现两者在class="txt"标签中,而且链接是href属性,名字是title属性,可以直接通过get_attribute()函数获取。aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

723071854-5b83affa78c11_articlex.pngaK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

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...aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

链接中的数字就是歌曲的id,所以我们拥有歌曲id后,可以直接从该链接下载歌词,歌词文件是json格式,所以我们需要用到json包。aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

3947875761-5b83affa9a593_articlex.pngaK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

而且直接获取的歌词中,每行有一个时间轴,需要用正则表达式来剔除,完整代码如下:aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

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...aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

链接中的数字为歌曲的id,可以直接根据歌曲的id来下载音频文件。完整代码如下:aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

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

相关推荐:aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

如何利用Python爬取网易云音乐热门评论aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Python爬取qq音乐的过程实例aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

以上就是超简单的Python爬虫之网易云音乐的下载的详细内容,更多请关注少儿编程网其它相关文章!aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

来源:php中文网aK0少儿编程网-Scratch_Python_教程_免费少儿编程学习平台


相关文章:

支持一下 ( )

超简单的Python爬虫之网易云音乐的下载

      匿名评论
    • 评论
    人参与,条评论
    超简单的Python爬虫之网易云音乐的下载

客服在线

服务时间

周一至周日 9:00-21:00