目标

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

好了,不说废话了。这次的目标主要是根据网易云中歌手的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))

下载歌词

链接中的数字就是歌曲的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

下载音频

链接中的数字为歌曲的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

源码地址Github:Link​github.com

python网易云_小白都懂的Python爬虫之网易云音乐下载相关推荐

  1. python精通大学_小白21天精通Python是如何做到的?

    题记:大二的时候发现人生苦短,所以信了拍神,开始学Python.学了大半年之后成功转行做前端了.来写个教程帮助大家入门Python. Python零基础入门 零基础入门就得从最基本的变量,语法格式,数 ...

  2. 小白python教学视频教程_小白零基础入门Python开发全套完整版

    课程大纲 第一阶段(1-3天): 该阶段首先通过介绍不同领域的三种操作系统,操作系统的发展简史以及Linux系统的文件目录结构让大家对Linux系统有一个简单的认识,同时知道为什么要学习Linux命令 ...

  3. python函数笔记_小白学习笔记之Python函数(一)

    遍历字典 keys() 返回字典的所有的key d={'name':'葫芦娃','age':'7','gender':'男'} for k in d.keys(): print(k) #name,ag ...

  4. 怎么学python知乎_你们都是怎么学 Python 的?

    自学确实是比较难得,没有一个好的规划,好的学习路线图,你不会知道自己下一步该怎么办. 今天我就帮你来解决,分享2020年黑马程序员Python学习路线图,包含学习路线图,学习视频,学习工具,你都可以找 ...

  5. python判断素数_小白学Python | 你还在说你入不了门吗

    收藏的好多啊 原创不易,动动小手,点个赞啦!! 十二月份,天气有时候会很阴沉,一天都见不到太阳.气温也慢慢变冷了,晚上回家还是会感觉到衣服穿少了. 阴阴沉沉总会过去的,我还是期待阳春三月. 2019年 ...

  6. 21天精通python电子版_小白21天精通Python是如何做到的?

    第二种:看网站入门教程,很多人推荐的廖雪峰Python教程 第三种:视频教程,推荐慕课网.其他还有网易云课堂,学堂在线(这个里边大学课程比较多) 学写一些基本的Python程序,上述<简明 Py ...

  7. 小白学python需要多久_小白学Python | 你还在说你入不了门吗

    收藏的好多啊 原创不易,动动小手,点个赞啦!! 十二月份,天气有时候会很阴沉,一天都见不到太阳.气温也慢慢变冷了,晚上回家还是会感觉到衣服穿少了. 阴阴沉沉总会过去的,我还是期待阳春三月. 2019年 ...

  8. python是不是最简单的语言_全世界都公认运行Python的最简单方法

    Python是一种跨平台的编程语言,这意味着它可以在Windows,macOS,Linux等多种平台上运行,甚至可以移植到Java和.NET虚拟机.它是免费和开源的. 即使当今的大多数Linux和Ma ...

  9. python 扒数据_不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  10. 按键精灵和python功能对比_对比其他工具,Python具有的3个优点

    如果你对数据分析有所了解,一定听说过一些亲民的工具如Excel.Tableau.PowerBI等,都能成为数据分析的得力助手.但它们的不足也是显而易见的:操作繁琐,复用性差,功能相对局限单一. 怎么解 ...

最新文章

  1. js中substr,substring,indexOf,lastIndexOf的用法
  2. 与跨国巨头合作,做羊还是做狼? --- 我看SAP取消HAND合作伙伴资格
  3. ABAP开发如何动态的实现任意表的ALV显示
  4. java有效索引范围_java – 索引范围的上限始终假定为独占?
  5. 220万电商人竞相参与,阿里巴巴认证解决企业人才难题
  6. Android popupwindow 失去焦点或者点击空白区域时消失的解决方法
  7. 启动thriftserver.sh
  8. cad抛物线lisp程序_数控车宏程序编程实用干货,全在这里了...
  9. 和菜鸟一起深入学习国嵌实验之vim常用命令
  10. WINDOWS删除N天前的文件命令forfiles
  11. 绿色版DNF(地下城勇士)全键盘连发工具,支持DNF双开
  12. php gd jpeg,怎么解决GD库不支持JPEG
  13. 多媒体(流媒体)技术领域及开源系统,媒体库数据如音乐、图片问题等-(图像,音视频)
  14. 【蓝桥杯备战】Day03
  15. Data Path Manager(DPM)-数据路径管理
  16. C++MYSQL:获取表结构:MYSQL_FEILD
  17. 创意简约中国风新年快乐牛年大吉通用PPT模板
  18. js截取指定字符前面或后面的内容,可以设置指定符号 “-” “%”等
  19. 夫兵形象水,水之行避高趋下,兵之形避实击虚;水因地制流,兵因故制胜。故兵无常势水无常形。能因敌变化取胜者谓之神。
  20. html姓氏样式,单个姓氏聚合页.html

热门文章

  1. Sigar介绍与使用
  2. LightBurn(激光切割排版软件)官方中文版V1.0.04 | 激光切割排版软件哪个好
  3. 用c语言在Clion平台编写system(“cls“)清屏函数无效甚至异常解决方法。
  4. Visual Studio 2012 激活码
  5. 数据结构(C语言版)严蔚敏课后答案
  6. ODI Studio(二)--接口数据库集成,数据库 TO 数据库
  7. 等宽字体与非等宽字体_我最喜欢的等宽字体
  8. sans serif字体_30种免费的Sans Serif字体下载
  9. jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)
  10. python如何高效办公_用 Python 高效办公|一次写好100个word通知,还有谁?