目录1.前言

2.分析一下1.

2.

3.

3.代码解释

4.完整代码

5.结语

1.前言

前面发布了一篇关于QQ音乐爬取的教程,但对于我们这种文艺青年来说,一个平台的歌曲怎么够我们听的,也是因为每个平台歌曲的权限不同,所以不同平台也有不同的歌曲,今天,给大家带来爬取酷狗音乐的教程,就是歌多!!!

2.分析一下

我们大家听歌的时候大都是去搜喜欢的歌曲名或者是喜欢的歌手,那今天我们就以歌手为例,下载搜索歌手出现的歌曲列表,如下。

我们就是要下载列表中的全部歌曲。

1.

首先我们分析一下,我们执行代码时,改变的肯定是歌手名,就是当我们输入歌手的名字时,它会获取到有关这个列表的所有歌曲的信息,所以我们要从搜索部分入手。

如图:当我们在搜索框输入信息时,每按一次键盘就会出现一个文件,当我们搜索完,按回车时,会发现一个文件,这个文件包含了这个列表的所有信息,也就是所搜索歌手的全部歌曲,而且每一项都包含了这首歌曲的详细信息,但遗憾的是没有这首歌曲的播放地址,没关系,至少我们的方向是对的。

我们分析这个文件的地址:

https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=%E6%B1%AA%E8%8B%8F%E6%B3%B7&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073826

这应该是经过地址编码的,我们转码看一下:

https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=汪苏泷&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073826

看到变化了吗,没错,关键字"keyword"就是歌手名,我们改变地址中的keyword就可以得到,不同歌手的歌曲列表

2.

既然我们找到了歌曲的详细信息,就要分析信息中哪些是我们想要的,但在此之前,我们得找到歌曲的其他信息,不然一处信息是无法判断的。我们点开一首歌曲,检查一下,我们可以看到这样一个文件。

这个文件包也是包含了歌曲的详细信息,但重要的是,有一个可疑的地址,我们点开来看,猜对了,就是歌曲的播放地址,哈哈,是不是信心大增。

3.

如果只看播放地址的话我们发现不了什么规律,那我们看一看这个文件的地址,多看几个,没准你会有新的发现。

仔细看一看,发没发现两个关键字,“hash"和"album_id”,是不是觉得和我们前面发现的信息有联系啊,没错,我们最开始分析的那个文件中,歌曲的详细信息里就包含了这两个关键字的值。

所以获取歌曲播放地址的步骤我们大致也明白了,我们可以根据我们分析的第一个文件中的"hash"和"album_id"来获取我们分析的第二个文件的地址,第二个文件包含了歌曲的播放地址,所以,好吧,图解一下。

这下应该很非常清楚了吧,光看图也该明白了吧!!!

3.代码解释

再给你们稍微说明一下。

我们根据歌手搜索时,参数歌手名是字符串类型,但带到地址中要进行编码转换。

调入模块:

import urllib.request,urllib.error,urllib.parse

代码部分:

code_name = urllib.parse.quote(name) #字符串转化为编码格式

获取歌手的歌曲列表,这是图解的第一步,注释部分是根据搜索的歌名获取歌曲列表,也就是一首歌曲的不同演唱版本,使用时只需要将上面的地址注释就可以了

代码:

music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073804" % code_name #获取歌名产生的歌曲列表 下载列表全部

# music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112406527023765769748_1588091726282&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588091726284" % code_name #搜索歌手产生的歌曲列表 下载列表全部

获取带有歌曲播放地址的文件的地址,这是图解的第三步:

代码:

information_url = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19101144344902676131_1588093696865&hash={}&album_id={}&dfid=2AHvg428HZSx0oRNWX0prTMo&mid=4b42424f9fa4d173c4601c6b476003f2&platid=4&_=1588093696867".format(music_hash,music_albumid)

获取歌曲的播放地址,这是图解的最后一步:

代码:

music_url = cut_dict["data"]["play_url"]

分析一下的目的就是让你们在看完整代码的时候没有那么懵,结合我们分析的步骤,和每段代码的作用,完整看一遍代码,很容易理解。

4.完整代码

import requests

import re

import json

import os

import urllib.request,urllib.error,urllib.parse

import time

headers = {"cookie": "kg_mid=4b42424f9fa4d173c4601c6b476003f2; kg_dfid=2AHvg428HZSx0oRNWX0prTMo; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1587913892,1588084386; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; kg_mid_temp=4b42424f9fa4d173c4601c6b476003f2; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1588093697",

"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}

content_url_list = []

def get_url(name):

code_name = urllib.parse.quote(name) #字符串转化为编码格式

music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073804" % code_name #获取歌名产生的歌曲列表 下载列表全部

# music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112406527023765769748_1588091726282&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588091726284" % code_name #搜索歌手产生的歌曲列表 下载列表全部

music_list_response = requests.get(music_list,headers=headers,).text

music_list_html = re.findall(r'\((.*)\)',music_list_response)[0]

music_list_html_dict = json.loads(music_list_html)

for i in range(len(music_list_html_dict["data"]["lists"])):

music_hash = music_list_html_dict["data"]["lists"][i]["FileHash"] #关键字 hash

music_albumid = music_list_html_dict["data"]["lists"][i]["AlbumID"] #关键字album_id

information_url = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19101144344902676131_1588093696865&hash={}&album_id={}&dfid=2AHvg428HZSx0oRNWX0prTMo&mid=4b42424f9fa4d173c4601c6b476003f2&platid=4&_=1588093696867".format(music_hash,music_albumid)

content_url_list.append(information_url) #包含歌曲详细信息

return content_url_list

def Preservation(sid):

url = sid

response = requests.get(url,headers=headers).text

time.sleep(3) #时间延迟 控制爬虫爬取速度

cut_json = re.findall(r'\((.*)\)',response)[0] #格式为json格式

cut_dict = json.loads(cut_json) #转换为字典格式 才能根据键获取值

music_url = cut_dict["data"]["play_url"] #歌曲播放地址

music_name = cut_dict["data"]["song_name"] #歌曲名

singer = cut_dict["data"]["author_name"] #歌手名

data_url = "D:/Pycharm文件/网络爬虫/酷狗音乐/"

data_name = data_url + music_name + "_____" + singer + ".mp3"

content_url = requests.get(music_url,headers=headers).content

try:

if not os.path.exists(data_url): #判断有误文件夹

os.mkdir(data_url)

if not os.path.exists(data_name): #判断有无文件

print("正在下载 %s" % (music_name + "---" + singer))

with open(data_name,"wb") as f:

f.write(content_url)

print(" %s 下载成功" % (music_name + "---" + singer))

else:

print("文件已存在")

except:

print("下载失败")

for sid in get_url("不分手的恋爱"): # 当没有版权时是没有play_url的 这部分要修改

Preservation(sid)

time.sleep(2) #时间延迟 控制爬虫访问服务器时间 避免过快被反爬

5.结语

这次,我感觉写的挺详细了,当然只是我自己觉得(嘻嘻),有什么意见或建议都可以私信我,我会努力改正,代码有不足的地方还请指点,我也会努力改正,我们一起加油呀。对了,别忘了多多支持我呀(嘻嘻)。

python爬取收费音乐_想下载的歌曲太多?嫌麻烦?要付费?戳这,帮你解决---Python爬取酷狗音乐...相关推荐

  1. 酷狗音乐动态壁纸脱离酷狗音乐独立运行

    这个酷狗音乐动态壁纸真是太好看了,用上了就再也不想回到原来枯燥的静态壁纸了.可是这个动态壁纸想要不掉,就要保持酷狗音乐开机自启还要一直保持后台运行,这简直像极了霸王条款... 对于我这个本本来说,我确 ...

  2. 仿酷狗音乐播放器已开源!

    转载请说明原出处,谢谢:http://blog.csdn.net/zhuhongshu/article/details/41037875 距离我发布测试版的Redrain音乐盒(仿酷狗播放器),现在正 ...

  3. 酷狗音乐模仿还在继续

    酷狗音乐模仿还在继续 前一段时间刚好有时间,就试着去写一写酷狗音乐的界面,无奈好多资源图片找不到,只能凑合着用吧,界面做的还很粗糙,有待细化.仔细观察酷狗音乐界面,主要可以分为四部分构成: 标题栏 左 ...

  4. android 高仿酷狗源码,项目源码--Android类似酷狗音乐播放器

    知识技能概要: 1.音乐文件的扫描与管理 2.音频流的解码 3. UI控件的综合使用 4.播放列表方式管理 5.随机播放方式 6.源码带详细的中文注释 ...... 详细介绍 1.音乐文件的扫描与管理 ...

  5. 酷狗音乐车载Android版,酷狗音乐车载版

    酷狗音乐车载版介绍 酷狗音乐车载版是国内老牌数字音乐播放软件,酷狗音乐盒集歌曲搜索播放.高清MV在线点播以及KRC精准歌词等优秀功能于一身,在用户当中有着优秀的口碑. 酷狗音乐怎么去广告 很多的用户朋 ...

  6. 为什么酷狗音乐消息中心不可以服务器,手机酷狗音乐怎么设置好友消息免打扰?...

    手机酷狗音乐怎么设置好友消息免打扰? 腾讯视频/爱奇艺/优酷/外卖 充值4折起 酷狗音乐是迄今为止最强大,最多人使用的音乐软件,而在酷狗音乐经常收到某好友的消息?不想跟TA聊天,但是太烦人?可以设置好 ...

  7. Android插件化开发指南——实践之仿酷狗音乐首页

    文章目录 1. 前言 2. 布局分析 3. 底部导航栏的实现 4. 顶部导航栏和ViewPager+Fragment的关联 1. 前言 在Android插件化开发指南--2.15 实现一个音乐播放器A ...

  8. 酷狗音乐导入ipod_iPod死了,听音乐也不会让人分心

    酷狗音乐导入ipod It's been one year since Apple killed off the last two dedicated MP3 players. I still mis ...

  9. python爬取酷狗音乐json数据为空_【Python3爬虫】下载酷狗音乐上的歌曲

    经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:python3.5+pycharm 使用到的库:requests,re,json 步骤: 打开酷狗音乐的官网,输入想要搜索的歌曲(例如<天 ...

  10. python爬取酷狗音乐top500_python获取酷狗音乐top500的下载地址 MP3格式

    下面先给大家介绍下python获取酷狗音乐top500的下载地址 MP3格式,具体代码如下所示: # -*- coding: utf-8 -*- # @Time : 2018/4/16 # @File ...

最新文章

  1. 阿里前员工跳槽后曝光薪资截图:新公司月入五万多,很满足!
  2. mongoengine中queryset触发网络访问机制剖析
  3. 图像工程CH5:图像消噪和恢复
  4. 为什么REST如此重要
  5. 提高个人执行力的途径
  6. 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板
  7. 编写树莓派引脚驱动代码
  8. 【竞赛笔记】飞思卡尔智能车竞赛
  9. Macbook pro M1使用免费的方法读写NTFS的折腾之路
  10. BUG生命周期和管理
  11. [转贴]一位营销总监的辞职信(非常经典)
  12. windows提权速查流程
  13. Easier UVM Coding Guidelines / 便捷UVM 编码指南
  14. 2017年7月编程语言排行榜
  15. 美名腾智能起名系统有了新界面
  16. Linux系统桌面环境(又称图形界面)有哪些?
  17. 美国 Sinclair 电视台网络全面瘫痪,罪魁祸首系勒索软件
  18. 解决笔记本电脑连接不上鼠标问题(亲测有效)
  19. matlab三维可视化,MATLAB中三维数据可视化及应用
  20. 卷毛机器人符文_从零开始教:辅助必学机器人,练好轻松上白金

热门文章

  1. android修改开机动画和铃声
  2. 除了Office和wps,还有什么办公软件比较好用?
  3. android 开发种子文件,IT之家学院:如何制作种子文件和磁力链接
  4. web项目报404一直找不到图片(路径绝对正确)
  5. 基于51单片机GPS定位系统GSM短信上报设计方案原理图
  6. displaytag分页中文处理
  7. 5个不可多得的PPT小技巧,工作再忙也要学习!
  8. 三星android se,安卓小钢炮小米8 SE初体验!华为三星靠边站
  9. vivo7.0系统怎么无root激活XPOSED框架的教程
  10. 特斯拉为什么不用激光雷达和高精地图?