目录

  • 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 timeheaders = {"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,).textmusic_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"]  #关键字 hashmusic_albumid = music_list_html_dict["data"]["lists"][i]["AlbumID"]  #关键字album_idinformation_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_listdef Preservation(sid):url = sidresponse = requests.get(url,headers=headers).texttime.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).contenttry: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爬取酷狗音乐-详解(多图预警)相关推荐

  1. python爬取酷狗音乐排行榜

    本文为大家分享了python爬取酷狗音乐排行榜的具体代码,供大家参考,具体内容如下 转载于:https://www.cnblogs.com/Pythonmiss/p/10799941.html

  2. Python爬取酷狗音乐歌手信息

    前面我们说过用python爬取网易云音乐的歌手信息,Python爬取网易云音乐歌手信息 今天我们来爬取一下酷狗音乐的歌手信息(歌手id和歌手名),如果环境没有安装好,可以参照前面爬网易云环境配置作为参 ...

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

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

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

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

  5. Python 爬取酷狗音乐的思路分析

    经过多次抓包,发现酷狗音乐的歌名是通过hash 加密之后拼接到url中的,当你点击播放时,会发起一个ajax请求,并且携带hash值和之间戳,但是我发现时间戳有没有都无所谓,response 中会有该 ...

  6. python爬取酷狗音乐_Python爬取酷狗音乐

    在常见的几个音乐网站里,酷狗可以说是最好爬取的啦,什么弯都没有,也没加密啥的,所以最适合小白入门爬虫 本篇针对爬虫零基础的小白,所以每一步骤我都截图并详细解释了,其实我自己看着都啰嗦,归根到底就是两个 ...

  7. python爬取酷狗音乐url_python-从酷狗下载爬取自己想要的音乐-可以直接拿来体验哟...

    因为最近发现咪咕音乐版权好多,当时我就在想是不是可以爬取下来,然后花了一些时间,发现有加密,虽然找到了接口,但是只能手动下载VIP歌曲,对于我们学IT的人来说,这是不能忍的,于是就懒得去解密抓取了,但 ...

  8. python爬取酷狗音乐_Python实例---爬去酷狗音乐

    项目一:获取酷狗TOP 100 排名 文件&&歌手 时长 效果: 附源码: import time import json from bs4 import BeautifulSoup ...

  9. python爬取酷狗音乐的mv地址_爬取酷狗音乐.py

    import requests from selenium import webdriver from pyquery import PyQuery as pq #获取歌名 def Access_to ...

最新文章

  1. android碎片调用动态碎片,Android Training - 使用碎片创建一个动态UI
  2. AutoCAD 命令参考手册
  3. XML表示的数据库数据
  4. UA MATH566 统计理论 一个例题 Hierarchical Model的统计性质
  5. JZOJ 5956. 【NOIP2018模拟11.7A组】easy LCA
  6. 逆向so_记一次APP的so层算法逆向(七)
  7. 奖学金c语言程序,奖学金 (C语言代码)
  8. java string范围_字符串索引超出范围? (Java,子字符串循环...
  9. Windows Server 2008通过计划任务定时执行bat文件
  10. SQL Server 视图 语句
  11. 在Linux下配置打印机
  12. 赶紧收藏!不可多得的Instagram运营技巧
  13. RV1109人脸识别门禁闸机主板方案
  14. python里怎么使用snip_MacOS下好用的截图软件snip
  15. 不同按钮进入同一个页面显示不同的div
  16. MMaction2中AVA数据集标注文件解读
  17. Apache Calcite 论文翻译
  18. 2021考研英语黄皮书英一英二全套加解析
  19. xCode 编写C++程序
  20. 2022中国健康展,睡眠健康,生活健康展,药食同源,大健康展

热门文章

  1. 【渝粤题库】广东开放大学 电子支付与安全 形成性考核
  2. Ubuntu系统备份与刻录
  3. 使用Python批量旋转,镜像图片
  4. 关于宝宝湿疹你知道多少?这份湿疹攻略,建议家长收藏备用
  5. PHP 访问 samba,如何使用SMB共享绕过PHP远程文件包含限制进行安全测试
  6. MVTec 针对 Intel 发行版工具套件推出新插件
  7. linux|tgz解压出错
  8. 【c++内存系列】二、c++动态内存分配和静态内存分配
  9. 分布式中的CAP原理
  10. 016基于pinia完成Vue3的前端数据持久化储存storage的方案落地