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最新學習資料、視頻教程、電子書等等。

在這里插入圖片描述

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM