python爬取酷我音乐(收费也可)

python

第一次创作,请多指教

环境:Python3.8,开发工具:Pycharm

第三方库:requests

详细

进入酷我音乐的网站到搜索界面


输入歌名进去打开开发者工具会发现这个包


它里面包含了这一页的音乐数据,我们需要的是这个参数


然后开始写代码吧,先找到所需的音乐数据

python has-numbering">import requests

import json

import os

def music_download():

kw = input("请输入音乐名称:")

# 请求头

headers = {xian

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63",

"Cookie":"_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P",

"Referer": "http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6",

"csrf": "HYZQI4KPK3P",

}

# 参数列表

params = {

"key": kw,

# 页数

"pn": "1",

# 音乐数

"rn": "10",

"httpsStatus": "1",

"reqId": "cc337fa0-e856-11ea-8e2d-ab61b365fb50",

}

# 创建列表,后面下载需要

music_list = []

url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"

res = requests.get(url = url,headers = headers,params = params)

res.encoding = "utf-8"

text = res.text

# 转成json数据

json_list = json.loads(text)

# 发现data中list是存主要数据的地方

datapack = json_list["data"]["list"]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

接下来是重要的地方

先随便试听一首音乐,找到他的json数据


我们发现这个json数据里含有.mp3的链接,这就是音乐文件

复制他的url,进去看是一个接口


他的url有规律,之前我们提取的rid参数就起了作用,把它复制到链接里,这里看代码吧

# 遍历拿到所需要的数据,音乐名称,歌手,id...

for i in datapack:

# 音乐名

music_name = i["name"]

# 歌手

music_singer = i["artist"]

# 待会需要的id先拿到

rid = i["rid"]

# 随便试听拿到一个音乐的接口,这是的rid就用得上了

api_music = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3"

"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1"

"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5".format(rid)

api_res = requests.get(url = api_music)

# 打印发现真实的url确实在里面

# print(api_res.text)

music_url = json.loads(api_res.text)["url"]

# 大功告成,试试效果

print(music_name)

print(music_singer)

print(music_url)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

顺便写了个方便下载的功能

# 在此之前先创建列表

music_list = []

  • 1
  • 2

函数体内建一个字典方便保存歌名与音乐数据

# 把数据存到字典方便下载时查找

music_dict = {}

music_dict["name"] = music_name

music_dict["url"] = music_url

music_dict["singer"] = music_singer

music_list.append(music_dict)

# 看看真实数据数量

print(len(music_list))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

遍历之前的列表数据进行判断,利用索引找到指定的url

# 下载

xiazai = input("输入要下载的音乐名称:")

# 下载位置

root = "E://下载的music//"

# 每个字典里有name和url

for i in range(len(music_list)):

try:

if xiazai == music_list[i]["name"]:

# 创建文件夹

if not os.path.exists(root):

os.mkdir(root)

# 拿到字典中对应的音乐url数据

music_content = requests.get(url = music_list[i]["url"]).content

with open(root + "{}.mp3".format(music_list[i]["name"]),"wb") as f:

f.write(music_content)

print("下载成功")

except:

print("下载失败")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

然后就可以愉快的下载付费音乐啦

完整代码

import requests

import json

import os

def music_download():

kw = input("请输入音乐名称:")

# 请求头

headers = {

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63",

"Cookie":"_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P",

"Referer": "http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6",

"csrf": "HYZQI4KPK3P",

}

# 参数列表

params = {

"key": kw,

# 页数

"pn": "1",

# 音乐数

"rn": "10",

"httpsStatus": "1",

"reqId": "cc337fa0-e856-11ea-8e2d-ab61b365fb50",

}

# 创建列表,后面下载需要

music_list = []

url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"

res = requests.get(url = url,headers = headers,params = params)

res.encoding = "utf-8"

text = res.text

# 转成json数据

json_list = json.loads(text)

# 发现data中list是存主要数据的地方

datapack = json_list["data"]["list"]

# 遍历拿到所需要的数据,音乐名称,歌手,id...

for i in datapack:

# 音乐名

music_name = i["name"]

# 歌手

music_singer = i["artist"]

# 待会需要的id先拿到

rid = i["rid"]

# 随便试听拿到一个音乐的接口,这是的rid就用得上了

api_music = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3"

"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1"

"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5".format(rid)

api_res = requests.get(url = api_music)

# 打印发现真实的url确实在里面

# print(api_res.text)

music_url = json.loads(api_res.text)["url"]

# 大功告成,试试效果

print(music_name)

print(music_singer)

print(music_url)

# 把数据存到字典方便下载时查找

music_dict = {}

music_dict["name"] = music_name

music_dict["url"] = music_url

music_dict["singer"] = music_singer

music_list.append(music_dict)

# 看看真实数据数量

print(len(music_list))

# 下载

xiazai = input("输入音乐名称:")

# 下载位置

root = "E://下载的music//"

for i in range(len(music_list)):

try:

if xiazai == music_list[i]["name"]:

# 创建文件夹

if not os.path.exists(root):

os.mkdir(root)

# 拿到字典中对应的音乐url数据

music_content = requests.get(url = music_list[i]["url"]).content

with open(root + "{}({}).mp3".format(music_list[i]["name"],music_list[i]["singer"]),"wb")

以上是 python爬取酷我音乐(收费也可) 的全部内容, 来源链接: utcz.com/z/531115.html

回到顶部