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

   日期:2020-08-31     浏览:338    评论:0    
核心提示:python爬取酷我音乐(收费也可)环境:Python3.8,开发工具:Pycharm第三方库:requests,lxml详细进入酷我音乐的网站到搜索界面输入歌名进去打开开发者工具会发现这个包它里面包含了这一页的音乐数据,我们需要的是这个参数然后开始写代码吧,先找到所需的音乐数据import requestsimport jsonimport osdef music_download(): kw = input(请输入音乐名称:) # 请求头 hea

第一次创作,请多指教

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

第三方库:requests

详细

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


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


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


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

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"]

接下来是重要的地方

先随便试听一首音乐,找到他的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)

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

 # 在此之前先创建列表
 music_list = []
函数体内建一个字典方便保存歌名与音乐数据
# 把数据存到字典方便下载时查找
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))

遍历之前的列表数据进行判断,利用索引找到指定的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("下载失败")

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

完整代码

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") as f:
                    f.write(music_content)
                    print("下载成功")
        except:
            print("下载失败")
if __name__ == "__main__":
    music_download()

运行结果

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服