网易云爬虫-爬取单曲和歌单所有歌曲

  今天断网了 敲代码不听歌的程序员是没有灵魂的,但是本地下载又太繁琐了,想着能不能一下把一个歌单的内容按文件夹进行下载,说做就做.
首先网上已经有了网易云js加载encSecKey和params参数的加密过程,分析也是稍微有些繁琐。这里我根据网易云的一个外链进行简单的下载

http://music.163.com/song/media/outer/url?id={}.mp3每个根据都有不同的id 我们只需要将不同歌曲的id给填充下载,就可以请求数据,保存到本地 就是下载了。
下载网易云歌单同理:

每个歌单的id都是固定,前面的url都是一样的,我们用户只需要点开歌单 填充歌单id就能够得到这个歌单的页面数据,然后再对这个页面数据进行分析,拿到每一个歌曲的id 再根据第一步下载单曲的步骤就能将歌曲下载下来了。是不是很简单, 下载我将我写的源代码贴下,不足之处,请大家指教!

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time    : 2020/4/24 15:05
# @Author  : zh
# @File    : wangyiyun.py
import json
import os
import re
from pprint import pprintimport requests
from selenium import webdriverclass WangYiYun():def __init__(self):self.song_mp3_url = 'http://music.163.com/song/media/outer/url?id={}.mp3'self.song_list_id = 'https://music.163.com/#/playlist?id={}'self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}self.song_url = "https://music.163.com/#/search/m/?s={}&type=1"self.songs = []def show_menu(self):print("欢迎来到网易云音乐下载中心")print("-"*50)print("1. 下载单曲")print("2. 下载歌单")print("3. 退出")print("-"*50)def run(self):self.show_menu()while True:option = int(input("请输入您要进行的操作:"))if option not in [1,2,3]:print("请重新输入")if option == 1:song_name = input("请输入歌曲名称:")song_id = self.get_song_id(song_name)if option == 2:# 下载歌单menu_id = int(input("请输入您要下载的歌单id:"))list_id = self.get_song_list_id(menu_id)else:breakdef get_song_list_id(self, nmenu_id):option = webdriver.ChromeOptions()option.add_argument('--headless')driver = webdriver.Chrome(r'chromedriver.exe',chrome_options=option)driver.get(self.song_list_id.format(nmenu_id))driver.switch_to.frame('g_iframe')list_name = driver.find_element_by_xpath('//div[@class="tit"]/h2').textlist_name = "".join(list_name.split())list_name = re.sub(r'\W', '', list_name)if not os.path.exists(list_name):os.mkdir(list_name)a_list = driver.find_elements_by_xpath('//span[@class="txt"]/a')title_list = driver.find_elements_by_xpath('//span[@class="txt"]/a/b')for a in a_list:item = {}item["song_id"] = a.get_attribute('href').split("=")[-1]item["song_name"] = title_list[a_list.index(a)].get_attribute('title').replace(u'\xa0', u'')item["song_name"] = item["song_name"].replace(u'\xf1',u'')self.songs.append(item)for item in self.songs:self.download_song(item, list_name)def get_song_id(self, song_name):option = webdriver.ChromeOptions()option.add_argument('--headless')driver = webdriver.Chrome(r'C:\Users\zh\Desktop\jxsz_code\pachong_code\chromedriver.exe',chrome_options=option)driver.get(self.song_url.format(song_name))driver.switch_to.frame('g_iframe')song_url = driver.find_element_by_xpath("//div[@class='text']/a").get_attribute('href')item = {}item["song_id"] = song_url.split('=')[-1]item["song_name"] = driver.find_element_by_xpath("//div[@class='text']/a/b").get_attribute('title')self.download_song(item)driver.close()  # 退出当前页面driver.quit()  # 退出浏览器def download_song(self, item, dir_name=None):req = requests.get(self.song_mp3_url.format(item["song_id"]), headers = self.headers)if dir_name is None:with open('%s.mp3'%item["song_name"], 'wb') as f:f.write(req.content)else:try:with open('%s/%s.mp3'%(dir_name, item["song_name"]), 'wb') as f:# with open('%s.mp3' % item["song_name"], 'wb') as f:f.write(req.content)print(item["song_id"])print("%s 下载完成"%item["song_name"])except:passdef test(self):req = requests.get(self.song_mp3_url.format(1439803847), headers = self.headers)# print(req.headers)with open("a.mp3", "wb") as f:f.write(req.content)wangyiyun = WangYiYun()
wangyiyun.run()

为了方便大家使用,我还使用pyinstaller将此程序打包成可执行文件,大家双击就行运行。
链接:https://pan.baidu.com/s/1YeFFkcUg1vCZQCBoXKo7eg
提取码:mp23
复制这段内容后打开百度网盘手机App,操作更方便哦

操作视频演示:
链接:https://pan.baidu.com/s/1d-mn5kSSqPhkTrNdA_YbCg
提取码:egj2
复制这段内容后打开百度网盘手机App,操作更方便哦

网易云爬虫-爬取单曲和歌单所有歌曲相关推荐

  1. python处理json数据——网易云评论爬取

    python处理json数据--网易云评论爬取 准备 代码 准备 1.python 3.7 2.需要安装的库: requests jsonpath pandas time fake_useragent ...

  2. 关于网易云音乐代码音乐播放器单曲和歌单的调用

    网易云音乐代码音乐播放器调用 单曲调用代码: <iframe frameborder="no" border="0" marginwidth=" ...

  3. 爬虫python代码网易云_python爬取网易云音乐热歌榜实例代码

    首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我 ...

  4. Python爬虫实战:网易云音乐爬取!

    本次目标 爬取网易云音乐 https://music.163.com/ PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 环境 ...

  5. java 歌词_网易云歌词爬取(java)

    网上也有很多人写过的,但感觉可能都不是很细,特此写了一份,不足之处请大家多多包涵 就以这首为例,给大家分享一下网易云歌词的获取 F12找到歌词的请求地址 0 通过观察可以发现就是这params和enc ...

  6. 网易云歌词爬取(java)

    网上也有很多人写过的,但感觉可能都不是很细,特此写了一份,不足之处请大家多多包涵 就以这首<凉凉>为例,给大家分享一下网易云歌词的获取 歌曲地址:https://music.163.com ...

  7. python爬去智联招聘网_Python爬虫爬取智联招聘(进阶版)

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 图片:Westworld Season 2 作者 王强 简介 Python追随者, ...

  8. 最简单实用的网易云爬虫!cloudmusic库带你起飞,歌曲、用户、评论信手捏来

    什么是cloudmusic? cloudmusic是一个功能强大的python库,对网易云多个api接口进行爬虫优化组装,使用最简单易用的方法获取一切你想要的信息.支持的内容包括歌曲文件.歌手.专辑. ...

  9. python3爬取网易云歌单数据清洗_如何利用Python网络爬虫爬取网易云音乐歌词

    赵雷的歌曲 本文以民谣歌神赵雷为数据采集对象,专门采集他的歌曲歌词,其他歌手的歌词采集方式可以类推,下图展示的是<成都>歌词. 赵雷歌曲---<成都> 一般来说,网页上显示的U ...

最新文章

  1. 虚拟中央处理器新星软机公司即将被收购
  2. Vmware 10 安装
  3. 从Varchar转换为 datetime
  4. CTFshow php特性 web132
  5. OO实现ALV TABLE 五:ALV的栏位属性
  6. antlr4 idea插件_正则都搞不定、我还有Antlr4解析器
  7. 萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第四节 PCA与梯度上升 (上)理解篇...
  8. 接受的token无法改变_基于BCH的新Token方案SLP的原理与应用
  9. 聊一聊 java8 中的 Optional
  10. Centos源码安装Python3
  11. java抓取动态生成的网页
  12. 在一切都是虚的世界里,你能做的是什么?
  13. 进击的UI------------UIToolBar(bottom导航条)
  14. 最新图解 github 修改github地址 用户名
  15. DuFile网赚网盘
  16. 网络出版服务许可证 你了解吗?
  17. 大学生个人职业生涯规划书PPT
  18. Java快速导出数据到CSV文件
  19. ESD防护为何对集成电路如此重要?又该如何防护?
  20. List转String的简单方法

热门文章

  1. 天地劫幽城再临服务器维护,天地劫幽城再临开服时间是什么时候_天地劫幽城再临开服时间一览_3DM手游...
  2. Android时事新闻客户端
  3. 梦想照进现实|CSDN 实体奖牌,从“设想”到“现实” 第一期
  4. 5.21下周黄金走势分析及开盘独家交易策略
  5. 第九节 使用设备树实现RGB 灯驱动
  6. HyperLPR3车牌识别-五分钟搞定: 中文车牌识别光速部署与使用
  7. zabbix安装 (zabbix在docker下快速安装教程)
  8. 【仿真】波形dump(vcd,shm,fsdb,saif,...)
  9. linux id和iduser,su userid 和 su - userid的区别
  10. 小心!手机这样充电被1秒窃取信息!