经分析,网易云音乐分为以下三类:免费音乐会员下载付费收听

前两类音乐包含了绝大多数音乐,付费收听仅仅是极少数。

本篇爬虫目的--> 实现需要会员下载的音乐能够免费下载

核心:网易云提供了一个音乐下载接口http://music.163.com/song/media/outer/url?id=音乐ID.MP3
将音乐ID替换为相应的音乐ID就行,然后请求该链接获得MP3文件

方式一(适用小白)

在在网易云客户端找到复制链接

然后将复制到的链接粘贴出来  类似于这种 https://music.163.com/song?id=1345848098&userid=3158930581345848098 即为音乐ID然后对接口进行替换得到 下载链接绿色-陈雪凝(会员下载音乐)http://music.163.com/song/media/outer/url?id=1345848098.MP3

方式二(爬虫):  该方式不是对方式一的代码实现,而是实现歌单下载第一步,找到歌单链接(在歌单的分享里面的 复制链接)

链接类似于 https://music.163.com/playlist?id=2520126575&userid=315893058

第二步,在浏览器访问该链接

F12 打开调试模式

点击箭头所指图标,然后点击任意音乐名字

可以看出下面的html源码中出现了蓝色标志;

该代码区域为该音乐的标签代码,因为这是一个列表,所以所有音乐都是这个格式。

爬取核心,直接提取该页面所有a标签,并进行判断里面是否存在b标签和a标签的 href 是否以 /song?id=开头,因为b标签里面含有音乐名,有的a标签和音乐标签类似,但是没有b标签,也不是我们要的音乐,所以要进行排除

代码:

传入列表链接 解析列表,获取歌单所有音乐 ID,并生成下载链接

    def ParsingPlayList(self, url):response=requests.get(url=url, headers=CloudMusic.header)soup=BeautifulSoup(response.text, "html.parser")alist=soup.select("a")Songs=[]for music in alist:if music.has_attr("href"):if str(music.attrs["href"]).startswith("/song?id="):id=str(music.attrs["href"]).replace("/song?id=", "")try:Songs.append({"id": id,"url": "http://music.163.com/song/media/outer/url?id=" + id + ".mp3","name": music.text})except:passreturn Songs

import requests
from bs4 import BeautifulSoup
import os
STATUS_OK,STATUS_ERROR,STATUS_EXITS=1,-1,0
class CloudMusic:header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'}def Down(self, down_url, filePath, NowIndex, TotalCount, FileDir):if not os.path.isdir(FileDir):  os.makedirs(FileDir)if os.path.isfile(FileDir + "/" + filePath + ".mp3"):print(filePath+",本地已存在")return STATUS_EXITSresponse = requests.get(down_url, headers=CloudMusic.header, allow_redirects=False)try:r = requests.get(response.headers['Location'], stream=True)size=int(r.headers['content-length'])print('\033[0;31m'+str(NowIndex) + "/" + str(TotalCount) + "  当前下载-" + filePath + "  文件大小:" + str(size) + "字节"+"\033[0m")CurTotal=0with open(FileDir + "/" + filePath + ".mp3", "wb") as f:for chunk in r.iter_content(chunk_size=512*1024):if chunk:f.write(chunk)CurTotal += len(chunk)print("\r" + filePath + "--下载进度:" + '%3s' % (str(CurTotal*100//size)) + "%", end='')print()r.close()return STATUS_OKexcept Exception as e:print(filePath + " 下载出错!" + " 错误信息" + str(e.args))if os.path.isfile(FileDir + "/" + filePath + ".mp3"):  os.remove(FileDir + "/" + filePath + ".mp3")return STATUS_ERRORdef ParsingPlayList(self, url):response=requests.get(url=url, headers=CloudMusic.header)soup=BeautifulSoup(response.text, "html.parser")alist=soup.select("a")Songs=[]for music in alist:if music.has_attr("href"):if str(music.attrs["href"]).startswith("/song?id="):id=str(music.attrs["href"]).replace("/song?id=", "")try:Songs.append({"id": id,"url": "http://music.163.com/song/media/outer/url?id=" + id + ".mp3","name": music.text})except:passreturn Songsdef Start(self, MusicList, Dd):total=len(MusicList)CurIndex=OkCount=FalseCount=ExitCount=0print("歌单共计:" + str(len(MusicList)) + "首")for data in MusicList:CurIndex+=1status=self.Down(data["url"],data["name"].replace("/",""),CurIndex,total,Dd)if status==1:   OkCount+=1elif status==0: ExitCount+=1else:           FalseCount+=1print("下载成功"+str(OkCount)+"首"+"\n下载失败"+str(FalseCount)+"首"+"\n本地已存在"+str(ExitCount)+"首")if __name__=="__main__":CrawlerClient= CloudMusic()# CrawlerClient.Start(CrawlerClient.ParsingPlayList("https://music.163.com/playlist?id=1992662269&userid=315893058"), "广场舞")# CrawlerClient.Start(CrawlerClient.ParsingPlayList("https://music.163.com/playlist?id=2584781662"),"治愈")CrawlerClient.Start(CrawlerClient.ParsingPlayList("https://music.163.com/playlist?id=2243470689&userid=315893058"),"mp3")

源码

转载于:https://www.cnblogs.com/yuanzessrs/p/10515235.html

爬虫实战-网易云音乐相关推荐

  1. VUE实战--网易云音乐

    VUE实战–网易云音乐 知识点: 音乐的暂停播放. 歌词的动态匹配. 动态组件: 根据is 属性 后面的组件名匹配 <component :is="组件的名字">< ...

  2. Python爬虫实践-网易云音乐

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  3. Python爬虫之网易云音乐下载

    Python爬虫之网易云音乐下载 目标 用Python根据网易云音乐的ID,下载音乐,保存到本地MP3格式 可以下载歌曲的范围:所有能够听的歌曲 配置基础 Python 3.5 模块 pycrypto ...

  4. 如何利用python爬虫获取网易云音乐某个歌手简介_Python 爬虫获取网易云音乐歌手信息...

    今天就先带大家爬取网易云音乐下的歌手信息并把数据保存下来. 爬取结果 环境 语言:Python 工具:Pycharm 导包 BeautifulSoup:用来解析源码,提取需要的元素. selenium ...

  5. python网络爬虫网易云音乐_一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取...

    标签下,如下图所示: 接下来我们利用美丽的汤来获取目标信息,直接上代码,如下图: 此处要注意获取ID的时候需要对link进行切片处理,得到的数字便是歌曲的ID:另外,歌曲名是通过get_text()方 ...

  6. python爬虫爬取网易云音乐下载_Python爬虫实践-网易云音乐!没有版权又如何!照样爬取!...

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  7. 网易云评论 爬虫 java_网易云音乐资源爬取(登录+评论)

    如何爬取网易云音乐的评论呢? 1.文本以华晨宇的<我的滑板鞋2016>为例 2.使用浏览器的工具,查找获取评论的url 3.不难发现,此API是通过POST请求获得我们想要的评论信息的,需 ...

  8. 爬虫获取网易云音乐单曲或歌单实现音乐闹钟

    今天介绍一款自己做android 应用,可以通过分享链接的方式实现网易云音乐,QQ音乐,虾米音乐,酷狗音乐四个平台上的单曲或歌单解析,最终实现播放音乐闹钟的设定.如下是应用界面(有点low,见谅). ...

  9. JS 解密剖析—爬虫之网易云音乐加密破解

    前言 网络爬虫的大障碍,就是各种加密.这其中包过登录的验证码以及加密.js混淆.js参数加密等等.其实以前也就了解过js加密.但是没有深入研究,借着这次实践研究了一下网易云音乐的加密方式. 博主通过网 ...

最新文章

  1. lvm快照的创建恢复
  2. RISC-V应用创新大赛 | 一文详解RVB2601套件 助你快速上手赢比赛
  3. 顺利达成微软HacktoberFest 2018
  4. jzoj6191-[NOI2019模拟2019.5.31]Exchange【线段树】
  5. 【Leetcode | 顺序刷题】数学目录
  6. uniapp网络请求封装;小程序请求接口封装;uni.request接口封装
  7. 【POJ - 2728】Desert King (最有比率生成树,分数规划)
  8. 在统计学中_我来尝试给你讲清统计学中的假设检验和两类错误
  9. Day02 目录和文件的管理(ADMIN02)
  10. [开源项目]_[C++ CSDN博客下载-CSDN博客导出-CSDN博客备份工具]
  11. ps制作2寸照片教程蓝底,ps怎么p二寸照片详细步骤
  12. mysql数据生成词云图,7个好用的在线词云生成工具
  13. MATLAB之GIF动图的绘制
  14. Linux利用sed批量自动化更换IP
  15. Why it occurs this error [The JSON value could not be converted to System.Nullable]
  16. cortex-m3/m4栈回溯
  17. 计算机学院考研动员大会,计算机学院2018年考研动员大会顺利召开
  18. 环境会计信息披露问题研究
  19. 画一个椭圆c语言程序,画椭圆 - c代码库 - 云代码
  20. MSDN系列 14 -- NDIS Protocol Driver 入门

热门文章

  1. iOS AVPlayer播放mp3
  2. python练习——万年历
  3. 16 岁高中生开发「粤语编程」项目,在 GitHub 火了!
  4. 计算机找单词嫌疑犯游戏纸境,纸境(Tengami)第一章怎么过_纸境(Tengami)第一章图文攻略_快吧单机游戏...
  5. python购物代码_python简单的购物车程序(含代码)
  6. 20145202马超《JAVA》预备作业3
  7. Fragment详解(一)
  8. 关于R7000电量显示59%充不进电的解决方案
  9. 想知道好用的录音机软件有哪些?给你推荐这些录声音的软件
  10. Azure KeyVault(四)另类在 .NET Core 上操作 Secrets 的类库方法-----Azure.Security.KeyVault.Secrets