Python下載網易雲歌曲(版許可權制的怎麼播放和下載呢?)

gxcuizy發表於2018-08-09

為什麼要這樣下載

網易雲音樂,我相信大多數人都用過,我個人覺得非常好用,也一直在用,有的時候,我們搜尋一些網易歌曲,發現播放不了,甚至下載不了,因為提示“版權方要求,當前歌曲僅限開通音樂包使用”(見下圖),也就是,需要購買才能夠下載以及播放,有沒有辦法不花錢就能播放和下載這首歌曲呢?我研究了一下,還沒發現呢,哈哈哈哈,往下看,你會發現驚喜的……  

Python下載網易雲歌曲(版許可權制的怎麼播放和下載呢?)

怎麼查詢版許可權制不讓下載和播放的音樂

初探network請求資訊 

首先,我想到的是開啟F12,檢視所有的network請求,一個一個的檢視請求返回資訊,突然發現了驚喜,如下圖所示: 

Python下載網易雲歌曲(版許可權制的怎麼播放和下載呢?)

那個請求返回的url,我想應該就是音樂的URL源地址,但是,我通過Python指令碼下載這個音樂下來後發現,和我想象的有點不一樣,因為這個url確實是音樂的源地址,但是並不是我需要的,因為這個url是當前播放音樂的源地址,然後,我繼續點選其他按鈕,當我點選播放音樂按鈕的時候,有一個detail的請求,裡面返回了很多資訊,如下圖所示:

Python下載網易雲歌曲(版許可權制的怎麼播放和下載呢?)

深入檢視network請求資訊 

我研究了一下這些返回資訊,發現並沒有找到需要的音樂url源地址,然後只能繼續在network裡面找,剛開始,我只是找的XHR的請求,然後我想著,查詢All的請求試試,因為,All請求裡,可以包含所有的資源請求,包括圖片以及檔案資源等,也許會有驚喜,果然,不出所料,讓我找到了一個好東西,如下圖這樣的: 

Python下載網易雲歌曲(版許可權制的怎麼播放和下載呢?)

發現驚喜

因為通過前面拿到當前播放的音樂的url源地址,猜想著所有的音樂的url應該都包含著mp3的字尾,所以,我就Ctrl+F,進行mp3的搜尋,果然,看到包含mp3的請求就那幾個,然後逐一分析,發現,有一個請求資訊,也就是上圖中的第一個請求,是一個MP3檔案資源,所以,我猜想,這個應該就是我需要的音樂URL了吧,然後我拿到這個URL繼續去下載檔案資源,果然,這就是我需要的音樂URL源地址,到這裡,也就是找到了這個因為版權受限不讓播放和下載的音樂了,驚不驚喜?意不意外?

Python下載MP3檔案原始碼  

最後,分享一波Python下載MP3資源的原始碼,使用的時候,得先進行幾個配置,首先是url,url就是需要下載的音樂URL地址,folder就是音樂需要儲存的位置,話不多說,直接上原始碼

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
下載MP3檔案
author: gxcuizy
time:2018-08-08
"""

import requests
import os


def download_file(mp3_url, file_folder):
    """下載MP3檔案"""
    # 資料夾不存在,則建立資料夾
    folder = os.path.exists(file_folder)
    if not folder:
        os.makedirs(file_folder)
    # 讀取遠端MP3資源
    res = requests.get(mp3_url)
    res.raise_for_status()
    # 獲取檔名
    file_name = os.path.basename(mp3_url)
    file_path = os.path.join(file_folder, file_name)
    print('正在寫入資原始檔:', file_path)
    # 儲存到本地
    image_file = open(file_path, 'wb')
    for chunk in res.iter_content(100000):
        image_file.write(chunk)
    image_file.close()
    print('寫入檔案結束!')


# 程式主入口
if __name__ == "__main__":
    # MP3源地址url
    url = 'http://m10.music.126.net/20180808172234/4446d41c850238c25cdcff1fe43249a4/ymusic/3686/b5b4/961c/39c9a20e7db813ea3290e1b1580cfa70.mp3'
    # MP3儲存資料夾
    folder = 'mp3/'
    # 呼叫下載方法
    download_file(url, folder)
複製程式碼

結束語 

大家有什麼不理解或者不明白的的,可以聯絡我,或者給我留言,我會及時回覆的,歡迎溝通和交流,謝謝。



相關文章