zoukankan      html  css  js  c++  java
  • Python:给你们安排一波VIP音乐,看我是如何不充会员也能下载的

    不会吧,不会吧,都21世纪了,不会还有人不会用Python来免费听歌吧!
    在这里插入图片描述
    来来来,今天我们用Python试试怎样去随便下载自己想要的音乐,付费也拦不住我,Python说的!

    这是要用到的模块
    1、requests
    2、prettytable
    安装模块不会移步我这篇文章:如何安装python模块, python模块安装失败的原因以及解决办法

    这是使用的环境
    1、python 3.8
    2、pycharm 2021.2

    大致流程思路

    一、分析网站(思路分析)

    1、搜索歌曲功能
    通过关键词搜索对应的 歌曲名称 歌手名称 专辑名称
    动态页面
    a. http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=%E5%91%A8%E6%9D%B0%E4%BC%A6&pn=1&rn=30

    2、下载歌曲功能
    明确 免费的音乐怎么下载 我们才会明白 付费的音乐是怎么来的

    二、搜索功能代码实现

    1、向 目标网站 发送网络请求
    2、获取数据
    3、提取数据 (歌曲名称 歌手名称 专辑名称)
    4、格式化打印数据

    三、下载歌曲实现
    https://www.kuwo.cn/api/v1/www/music/playUrl?mid={download_info[0]}&type=convert_url3&br=320kmp3
    分析这个链接从哪里来的

    我知道你们最想看的就是代码了,所以解释我都写到注释去了,大家直接看代码(留了个小报错,看看聪明的你能不能看出来)

    来人,上代码

    from urllib.parse import quote
    import requests  # 发送网络请求的模块
    import prettytable as pt # 格式化输出表格 as pt
    
    
    # 1. 向 目标网站 发送网络请求
    # 请求方式: get post delete...
    # 加一些伪装 伪装就已经准备好了
    # 快捷替换小技巧
    # 1. 选中要替换的内容
    # 2. Ctrl + r
    # 3. 在第一个框框里面输入(.*?): (.*) 第二个框里面输入 '$1': '$2'
    # 4. 点击 Replace All替换
    # 人生苦短,我用Python
    # 点赞收藏三连后加群免费领取本问对应视频教程~
    # Python最新学习资料、视频教程、电子书
    # 都在这个Python学习交流裙啦 872937351
    
    searchKey = input('请输入你要下载的歌曲或歌手名:')
    searchKey = quote(searchKey)
    headers = {
        'Cookie': '_ga=GA1.2.1829952759.1632831324; BusinessId={"std_plat":404,"std_dev":"b24a2c89-d830-47f5-ee62-3eaa2cbcd9e8","std_imei":"b24a2c89-d830-47f5-ee62-3eaa2cbcd9e8"}; _gid=GA1.2.1213855107.1635853703; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1635230576,1635230784,1635345246,1635853703; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1635853703; kw_token=SK7FZCBITOJ',
        'csrf': 'SK7FZCBITOJ',
        'Host': 'www.kuwo.cn',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
    }
    # 字符串的格式化
    url = f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={searchKey}&pn=1&rn=30'
    response = requests.get(url=url, headers=headers)
    # <Response [403]>: 爬虫程序 被抓到了
    # 200: 发送请求成功了 没被抓到
    # 2. 获取数据
    # 通过 .text拿到的是字符串
    # 通过 .json()拿到的 python语言当中的字典
    json_data = response.json()
    # 3. 提取数据 (歌曲名称 歌手名称 专辑名称)
    #       字典取值
    # 列表
    data_list = json_data['data']['list']
    # 新建了一个表格
    tb = pt.PrettyTable()
    # 写一行表头
    tb.field_names = ['序号', '歌名', '歌手', '专辑']
    count = 0   # 定义了一个序号
    info_list = []
    for data in data_list:
        # 字典 alt + 鼠标左键
        rid = data['rid']# 歌曲id
        name = data['name'] # 歌曲名称
        artist = data['artist'] # 歌手名称
        album = data['album'] # 专辑名称
        tb.add_row([count, name, artist, album])    # 表格数据写入
        info_list.append([rid, name, artist])      # 下载歌曲要用的信息
        count += 1
    print(tb)
    
    # 死循环
    while True:
        input_index = eval(input("请输入与你要下载歌曲的序号(-1退出):"))
        if input_index == -1:
            break
        download_info = info_list[input_index]
        # 以前 酷我音乐的链接, 把以前的接口里面要传入的参数 给添加到这个接口里面了
        # br=320kmp3控制音乐音质的一个参数 高品质音乐
        url_1 = f'http://www.kuwo.cn/api/v1/www/music/playUrl?mid={download_info[0]}&type=convert_url3&br=320kmp3'
        # 发送网络请求
        response_1 = requests.get(url_1, headers=headers).json()
        # 解析数据
        music_url = response_1['data']['url']
        # 发送请求
        music_data = requests.get(music_url).content
        with open(f'download/{download_info[1]}-{download_info[2]}.mp3', mode='wb') as f:
            f.write(music_data)
        print(f'{download_info[1]}, 下载完成!')

    运行结果
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    兄弟们,报错看出来了吗,我放在评论区了。

    人生苦短,我用Python
    大家点赞收藏三连后可以私信我免费领取Python最新学习资料、视频教程、电子书等等。

    在这里插入图片描述

    .

  • 相关阅读:
    BUUCTF [XMAN2018排位赛]四道misc题汇总
    祥云杯2020 Misc题解
    win10更换pip源
    BUUCTF N1BOOK配套题目
    kali下docker安装教程
    湖湘杯2020 Misc题解
    7号夺宝1元购iPhone6s 1元众筹怎么玩
    html5 的服务器推送 Server-sent Events和 websocket这两个是不是同一个东西,是两个不同的?
    WebSocket 是什么原理?为什么可以实现持久连接?
    使用HTML5的十大原因
  • 原文地址:https://www.cnblogs.com/hahaa/p/15505523.html
Copyright © 2011-2022 走看看