源码 | Python爬虫之网易云音乐下载
目标
偶然的一次机会听到了房东的猫的《云烟成雨》,瞬间迷上了这慵懒的嗓音和学生气的歌词,然后一直去循环听她们的歌。然后还特意去刷了动漫《我是江小白》,好期待第二季…
我多想在见你,哪怕匆匆一眼就别离…
好了,不说废话了。这次的目标主要是根据网易云中歌手的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 直接下载歌曲 https://blog.csdn.net/qq_38282706/article/details/80300546
Windows上安装Selenium爬取网易云歌曲 https://zhuanlan.zhihu.com/p/42078956
源码地址
https://github.com/blueberryc/web_crawler/blob/master/code/WYmusic.zip
∞∞∞∞∞
公众号回复“IT派”,
邀你加入IT派{ 技术青年圈}
源码 | Python爬虫之网易云音乐下载相关推荐
- Python爬虫之网易云音乐下载
Python爬虫之网易云音乐下载 目标 用Python根据网易云音乐的ID,下载音乐,保存到本地MP3格式 可以下载歌曲的范围:所有能够听的歌曲 配置基础 Python 3.5 模块 pycrypto ...
- Python爬虫实践-网易云音乐
1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...
- [附源码]计算机毕业设计JAVA网易云音乐推荐系统
[附源码]计算机毕业设计JAVA网易云音乐推荐系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Int ...
- 如何利用python爬虫获取网易云音乐某个歌手简介_Python 爬虫获取网易云音乐歌手信息...
今天就先带大家爬取网易云音乐下的歌手信息并把数据保存下来. 爬取结果 环境 语言:Python 工具:Pycharm 导包 BeautifulSoup:用来解析源码,提取需要的元素. selenium ...
- [附源码]SSM计算机毕业设计网易云音乐推荐系统JAVA
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- Python爬虫获取网易云音乐 我的喜欢歌单 歌曲数据
需求:突然奇想,获取网易云音乐 我的喜欢 歌单音乐数据 获取歌曲详情 如标题,歌手,时长,专辑等等 思路: 爬虫请求url 获取数据,找到对的链接请求就成功了一半,查看返回数据,然后保存数据(歌曲+歌 ...
- python +tkinter 打造网易云音乐下载播放器
先上图],本次爬取得是网易云音乐,因为接口很方便,还没试百度云音乐, 提供2种下载方式,单曲下载和url歌单链接批量下载,自动识别单曲或者是歌单链接,[正则表达式匹配] 由于搜索单曲,歌曲列表经过筛选 ...
- python 录制网易云登陆_小白都能看懂:Python爬取网易云音乐下载教程
配置基础 Python Selenium Chrome浏览器(其它的也可以,需要进行相应的修改) 分析 如果爬取过网易云的网站的小伙伴都应该知道网易云是有反爬取机制的,POST时需要对一些信息的参数进 ...
- python爬虫之网易云歌曲下载(需要js分析) -- 2020.06.20更新
背景 目的 >>> 通过python + kivy打包一个简易的网易云会员歌曲下载软件; 初试 >>> 用you-get库里面的网易云接口来实现下载; 失败 > ...
最新文章
- C#类型转换运算符之 explicit implicit
- python中的cli模块_Python 快速实现CLI 应用程序的脚手架
- ASP.NET aspx页面中 写C#脚本; ASP.NET 指令(%@%);
- 浏览器json格式化插件 yformater
- 用完成例程(Completion Routine)实现的重叠I/O模型
- [轻微]WEB服务器启用了OPTIONS方法/如何禁止DELETE,PUT,OPTIONS等协议访问应用程序/tomcat下禁用不安全的http方法...
- OpenCV人脸识别之一:数据收集和预处理
- PowerPivot for Sharepoint 2010 配制及常见错误
- [vscode] 推荐插件及配置
- JQuery 添加元素appendf 后\prepend前,before 前\after 后,删除元素remove\empty
- 用qt建立自定义对话框的方法,含vc2015 vc版本中使用
- 电脑屏幕总是晚上定时开启护眼模式,变成黄色?教你这招解决它
- 计算机系新春祝福语,2019新春祝福语 新年经典祝福语句大全
- java thrift异步调用_thrift异步调用 - thrift-cob_style-tnonblockingserver - ItBoth
- 2021李宏毅机器学习笔记--12 attack ML models
- MySQLStudy——Mac 下 Navicat Premium 12.1破解教程
- 实现HTML页面在手机浏览器上全屏的方式
- STM32单片机报错error: #20: identifier “TIM2_IRQn“ is undefined
- Spring学习手札(三)理解IoC 拯救不开心
- java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换