网易云音乐网页版API接口

前缀(主域名):http://music.163.com

1.1 获取歌词

  • 请求地址:/api/song/lyric?id=xxxxx&lv=1&kv=1&tv=-1
  • 请求参数:id:获取歌词对应的歌曲id

1.2 下载歌曲

  • 请求地址:/song/media/outer/url?id=xxxx.mp3
  • 请求参数:id:获取歌词对应的歌曲id

获取音乐信息

2.1 类封装音乐信息

class Musci_info(object):def __init__(self, id):self.id = id

2.2 获取音乐信息

图例分析



核心代码

'''
小编准备的python学习资料,加群:1136201545 即可免费获取!
'''
def get_music_info(self):url = "https://music.163.com/#/artist?id={0}".format(self.id)driver.get(url)'''frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。driver.switch_to.frame() # 切到iframe里面driver.switch_to.parent_frame() # 切回父级driver.switch_to.default_content() # 切回主文档'''driver.switch_to.frame('contentFrame') # 切到iframe里面,可以根据id或name值来定位,这里是根据name值定位,看上述图1artist_name = driver.find_element_by_id('artist-name').textprint(artist_name)path = os.getcwd() + "\\data\\{0}".format(artist_name) # 在当前工作路径下创建一个/data/歌手名字文件夹,例如:...../data/薛之谦# 调用os模块判断是否存在if not os.path.exists(path):os.makedirs(path)# 找到歌手所有的歌曲,find_element...是找到了当前html标签,然后find_elements...多了个s,这里返回一个包含多个歌曲信息的list,每个list里面有多个tr标签。一个tr对应一个歌曲,看上述图2tr_list = driver.find_element_by_id("hotsong-list").find_elements_by_tag_name("tr")music_info = []# 对每个tr标签进行遍历,寻找对应信息的标签内容,把音乐的名字及链接找出来,看上述图3for i in range(len(tr_list)):content = tr_list[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')music_info.append((title, href))# 返回音乐信息及当前歌手的路径地址return music_info, path

信息本地存储

核心代码

# 注意这里head的作用就是定义列的字段
def save_csv(self, music_info, path, head=None):# 将音乐信息存储到 .../data/歌手/ 目录下面,并以xx.csv存储data = pd.DataFrame(music_info, columns=head)# index=False去掉DataFrame默认的index列data.to_csv("{0}/singer{1}.csv".format(path, str(self.id)), encoding="utf-8", index=False)

运行结果

下载音乐及歌词

类封装下载

class Download_Music(object):# 初始化上述的歌曲名字,id,及存储的路径def __init__(self, music_name, music_id, path):self.music_name = music_nameself.music_id = music_idself.path = path

下载歌词
图例分析

核心代码

def get_lyric(self):# 根据前面的歌词api设置url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(self.music_id) + '&lv=1&kv=1&tv=-1'r = requests.get(url)raw_json = r.textch_json = json.loads(raw_json) raw_lyric = ch_json['lrc']['lyric']# 正则去除[]及里面的时间...del_str = re.compile(r'\[.*\]')# re.sub共有五个参数。其中三个必选参数:pattern, repl, string,两个可选参数:count, flagsch_lyric = re.sub(del_str, '', raw_lyric) # 实现正则的替换return ch_lyric

下载歌曲

def download_mp3(self):# 定义url,请求的apiurl = 'http://music.163.com/song/media/outer/url?id=' + str(self.music_id) + '.mp3'try:print("正在下载:{0}".format(self.music_name))# 通过urllib.request.urlretrieve进行下载歌曲urllib.request.urlretrieve(url, '{0}/{1}.mp3'.format(self.path, self.music_name))print("Finish...")except:print("Failed...")

实现

实现关键点一:提取歌曲id

方法一:
re.search 匹配包含
link = re.search(regex, mu['link']).group()
匹配后为id=1294910785,前面都为id=刚好3位,index从0开始,
也就是说[3:]即为所需要的id数据。
# .*是贪婪模式  尽可能多的匹配数据
regex = re.compile(r'id=.*') # .*贪婪模式匹配
link = re.search(regex, mu['link']).group()[3:]
或者采用以下分组解决
方法二:
regex = re.compile(r'(id)(=)(.*)')
link = re.search(regex, mu['link']).group() # id=1294910785
link = re.search(regex, mu['link']).group(0) # id=1294910785
link = re.search(regex, mu['link']).group(1) # id
link = re.search(regex, mu['link']).group(2) # =
link = re.search(regex, mu['link']).group(3) # 1294910785
也就是说直接使用
regex = re.compile(r'(id)(=)(.*)')
link = re.search(regex, mu['link']).group(3)
便可以实现获取id的效果了

实现关键点二:pandas读取数据引擎设置

由于此处文件夹命名有可能带中文,所以在mu_info=pd.read_csv()
这行代码中,容易出现问题。原因是调用pandas的read_csv()方法时,
默认使用C engine作为parser engine,而当文件名中含有中文的时候,
就会报错,这里一定要设置engine为python,即engine=‘python’

封装实现

def main(id):singer_id = id # 歌手id,自定义修改--根据自己爬取的歌手选择mu_info = Musci_info(singer_id) # 类初始化music_info, path = mu_info.get_music_info() # 调用方法,获取音乐信息及路径print(music_info)print(path)mu_info.save_csv(music_info, path, head=['music', 'link']) # 存储音乐的歌名及链接至csv文件''''''mu_info = pd.read_csv('{0}/singer{1}.csv'.format(path, str(singer_id)), engine='python', encoding='utf-8')'''通过iterrows遍历音乐信息的music文件iterrows返回的是一个元组(index,mu)'''for index, mu in mu_info.iterrows():music = mu['music'] # 取对应的歌曲# 通过正则取出歌曲对应的链接中的idregex = re.compile(r'(id)(=)(.*)')print('--------------------')link = re.search(regex, mu['link']).group(3)print('--------------------')print(link)music = Download_Music(music, link, path)music.save_txt()music.download_mp3()

调用呈现

手动获取歌手id
调用代码

if __name__ == '__main__':main(5781) # 填写歌手的id即可!

运行结果

Python带你面向对象爬取网易云音乐相关推荐

  1. python爬虫No.1|爬取网易云音乐歌手的前50首歌曲ID及名字

    自学pythonのNo.5 引语 知识总结 Requests XPath 案例 曾经有这样的梗黑网易云音乐 实际上网易云是很不错的音乐软件之一.这个梗挺让我不舒服的,挫折谁都有,矫情没必要但对矫情之人 ...

  2. 爬虫入门经典(十) | 一文带你快速爬取网易云音乐

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  3. 一文带你快速爬取网易云音乐,就是这么简单!

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  4. 如何用Python网络爬虫爬取网易云音乐歌曲

    今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...

  5. Python网络爬虫实践(1):爬取网易云音乐播放量大于1000万的歌单

    Python网络爬虫实践(1) 一.需求分析 爬取网易云音乐播放量大于1000万的歌单. 二.实施步骤 1.安装selenium selenium是一个用于Web应用自动化程序测试的工具,测试直接运行 ...

  6. Python 爬取网易云音乐所有评论

    题图:by cfunk44 from Instagram 在使用 Ajax 技术加载数据的网站中, JavaScript 发起的 HTTP 请求通常需要带上参数,而且参数的值都是经过加密的.如果我们想 ...

  7. 用Python爬取网易云音乐歌曲

    前天给大家分享了用Python网络爬虫爬取了网易云歌词,在文尾说要爬取网易云歌曲,今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将 ...

  8. 用python爬取网易云评论10w+的歌曲名_Python3爬取网易云音乐评论

    |下载W3Cschool手机App,0基础随时随地学编程>>戳此了解| 导语 利用Python为自己喜欢的音乐制作专属词云.至于词的来源嘛,当然是对应歌曲的所有评论或者热门评论啦!!!毕竟 ...

  9. Python爬取网易云音乐辑的图片、专辑名和专辑出版时间

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:阿里波特 来源:CSDN Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 h ...

最新文章

  1. android.os.NetworkOnMainThreadException异常
  2. Silverlight3 Tools Download link
  3. java算法实验标尺问题_在codeigniter项目中使用标尺库
  4. pip安装Python包时下载速度慢
  5. 极速收藏!巨详细的分布式架构知识体系
  6. 中国电信9月将率先推出5G新号段:资费也随之曝光 最高599元/月?
  7. cvc 降噪_哪款蓝牙耳机降噪效果最好,降噪音质俱佳的蓝牙耳机推荐
  8. 但是在公司开空调睡觉还是冷
  9. 获取oracle自增长id,ibatis获取主键自动增长ID(Oracle/MSSQL/mysql),取得刚插入的ID编号...
  10. Emmet的高级功能与使用技巧
  11. 【经典传颂】人月神话The Mythical Man-Month
  12. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛(上)
  13. PKI加密体系加密过程及原理
  14. 天龙八部,小师妹,李沧海,齐御风
  15. 《现代汉语》北大公开课
  16. 运营Tumblr的几个建议-教你成为tumblr达人
  17. 在SQL Server 2000里设置和使用数据库复制
  18. 智能快递柜的电气特性
  19. Android在一个app中启动其他app中的service或者Activity
  20. node.js之async的使用(series,whilst)

热门文章

  1. 中秋节的特别礼物----属于程序员的专有浪漫
  2. arcgis 删除创建的自定义地理变换文件
  3. 深度学习英文缩写_深度学习相关专业词汇简称汇总
  4. 哈尔滨工业大学计算机考研专业课,2020考研哈尔滨工业大学计算机考研考试科目...
  5. PS知识点大总结(二)——通道蒙版与图形图标设计
  6. antdesign+vue额外展开行expandedRowRender全部展开,并隐藏expandIcon展开收起按钮;antdesign表格嵌套表格
  7. 如何申请独立服务商(支付宝ISV)
  8. 数组排序:声明一个整型数组并填充数据,排序,输出排序后数据,倒序输出数据。
  9. 老毛挑U盘系统工具——ghost系统安装教程
  10. 实现兼容各浏览器的背景渐变,透明度渐变,色彩渐变