爬取七大平台歌曲的完整代码在git中的地址:https://github.com/wenjiankui/music_player
CSDN资源下载:我的下载资源中 “python爬取音乐”
python3.7
Windows10x64
火狐浏览器(可以不装)
python使用QT界面以及编程实现
firefox驱动geckodriver、Chrome驱动chromedriver-各个对应版本及下载地址
Python利用网易云音乐接口搭建的音乐推荐,根据单曲歌名推荐相关用户喜爱的歌曲
python爬取酷狗音乐
手把手教你使用Python抓取QQ音乐数据
python调用QT界面使用方法
python3.基础爬取网易云音乐
整合多家音乐网站(目前网易云/虾米/QQ音乐)的播放器(git代码)
Python 如何将项目打包成exe可执行程序
1、打开酷我音乐官网
2、按F12调出开发者工具,然后刷新网页
3、找到获取搜索结果的请求地址
我这里直接给出了,至于为什么是它,是一个个的点击查看内容。根据经验来,有个小技巧,它名字里面一般带有“music”,“search”,“list”,等一些关键字,(当然也不绝对)
4、查看请求内容是否为我们想要的
5、分析请求地址
请求地址如下:
http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=%E5%B0%91%E5%B9%B4&pn=1&rn=30&httpsStatus=1&reqId=28576680-b9e4-11ea-8e6f-af9bc29f5d42
分析地址:
第一步,获取搜索结果的请求地址就完成了
7、查找获取歌曲地址的请求
点击其中一首歌进行播放
这个地方的url就是歌曲的真正地址,可以直接复制该地址,在浏览器中打开
https://sz-sycdn.kuwo.cn/740375b0e3ea25aef233f854fb577bbe/5ef9b0fa/resource/n2/39/81/3430051340.mp3
http://www.kuwo.cn/url?format=mp3&rid=81135985&response=url&type=convert_url3&br=128kmp3&from=web&t=1593422074605&httpsStatus=1&reqId=f2d8b0e0-b9e8-11ea-8973-8fc613f859bd
这个地址中rid值就是我们之前得到的rid参数,然后后面的很多参数不知道干嘛的,直接丢弃,最终我们可以用的地址为:
http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web
将rid中的参数替换为我们之前得到的rid,就能获取到对应的歌曲地址了。
这个时候我们就已经得到了我们想要的所有数据了
"""
酷我音乐下载
爬取关键点:
1、搜索歌曲的url:
song_name:歌曲名
pagesize:搜索数量
'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={0}&pn=1&rn={1}&httpsStatus=1&reqId=d96418b0-adf5-11ea-a73f-a1f5bcc21a3f'.format(
search_name, pagesize)
2、获取下载歌曲的url:
song_id:歌曲id号
"http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web".format(
song_id)
"""
from tkinter import *
import json
import requests
def kuwo_search_api(search_name):
pagesize = "10" # 请求数目
# 添加提示
url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={0}&pn=1&rn={1}&httpsStatus=1&reqId=d96418b0-adf5-11ea-a73f-a1f5bcc21a3f'.format(search_name, pagesize)
# print(url)
headler = {"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Cookie": "__guid=112476674.3591527979254065000.1592106672924.2986; _ga=GA1.2.797505084.1592106674; _gid=GA1.2.45950846.1592106674; _gat=1; radius=14.103.71.201; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1592106674,1592106743,1592108182; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1592108182; uudid=cms5df72a00-3b3e-b4c1-03b5-904d3a4dd6ba; kw_token=E5BXLYPPYS; monitor_count=12",
"csrf": "E5BXLYPPYS",
"Host": "www.kuwo.cn",
"Referer": "http://www.kuwo.cn/search/list?key=".format(search_name),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
res = requests.get(url, headers=headler) # 进行get请求
# print(url)
res.encoding = 'utf-8'
res = json.loads(re.match(".*?({.*}).*", res.text, re.S).group(1))
res = res["data"]["list"]
# print(res)
song_list_meesage = []
i = 0
# 遍历所有歌曲
for item in res:
buf = {}
buf["song_name"] = item["name"]
buf["song_user"] = item["artist"]
buf["song_id"] = item["rid"]
buf["song_time"] = item["songTimeMinutes"]
i += 1
# 以下根据歌曲id获取歌曲url和歌曲播放时间
get_song_url = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web".format(
buf["song_id"])
res2 = requests.get(get_song_url)
# print(res2.text)
res2 = json.loads(re.match(".*?({.*}).*", res2.text).group(1)) # 同样需要用正则处理一下才为json格式,再转为字典
# print(res2)
buf["song_url"] = res2["url"]
# 去除重复的歌曲
song_find_flg = 0
for song_find in song_list_meesage:
if (song_find["song_name"] == buf["song_name"]) and (
song_find["song_user"] == buf["song_user"]):
song_find_flg = 1
if song_find_flg == 0 and len(buf["song_url"]) != 0:
song_list_meesage.append(buf)
# print(buf["song_name"], " - ", buf["song_user"], " - ", buf["song_time"], " - ", buf["song_id"])
# print(buf["song_url"])
# print("************************")
return song_list_meesage
第一步:获取搜索歌曲列表的地址
第二步:在歌曲列表信息中找到关键参数rid
第三步:找到获取歌曲地址的请求
第四步:将之前获取的rid与第三步获取的地址进行组合,就能获得想要的歌曲地址
因为篇幅有限,本人也不是很擅长讲解,所以就讲解了一个爬取最简单的平台,由这个讲解入门音乐爬取,然后结合代码,其他平台的爬取也就不难理解了。
这里面最难的要属网易云音乐了,其实爬取流程都一样,主要难点在于多了一个数据加密,
关于七大平台的音乐爬取和界面逻辑代码比较多,但是理解起来也不难,代码中都尽量详细的写了注释。这里就不再讲解了,在使用代码前,请仔细阅读readme文档
有什么问题,欢迎大家留言,我会尽量的为大家解答。