1. 程式人生 > >下載網易雲收費歌曲、觀看愛奇藝VIP視訊並下載

下載網易雲收費歌曲、觀看愛奇藝VIP視訊並下載

多年前,在一檔電視節目中,歌手韓紅斥責中國盜版太多,吐槽中國對版權的不重視、說實話,作為一名付不起VIP的良好中國公民來說,聽到這話挺無奈的,心想要是中國也和美國那樣知識版權意識太好,那以後誰還聽歌了。然而。我們做過的發展超乎了世界的想想,對版權意識的增加也完全超出了我的想想,不知何時起,網易云為代表的一批音樂運營商發動所有資源終於對音樂這塊下手了。有一句話說的好:“既然你要發動江湖勢力,那就讓你看看這究竟是誰的江湖”,

網易雲收費歌曲下載

開啟網易雲音樂的熱歌榜,以熱歌榜為例

鍵盤按F12鍵或滑鼠右鍵點選檢查,彈出開發者工具,然後點選其中一首歌,點選播放,我們就可以看到下面彈出了很多條目,這都是我們向伺服器傳送請求後返回的檔案,我們的任務就是在眾多檔案中尋找到我們正在收聽的歌曲檔案(即MP3檔案)
開發者工具


點選紅色邊框內的Media,在這裡我們可以看到伺服器響應返回的多媒體檔案,綠色箭頭所指就是歌曲檔案了。
開發者工具
既然找到了我們所要的檔案,該怎麼下載呢???不用擔心,右鍵點選該檔案。
將滑鼠地方在該檔案上,我們就可以看到該檔案的連線了,既然知道音訊的連結地址,我們有知道音訊在網上都是以二進位制檔案儲存傳輸的,那麼使用python就可以很容易的下載了,若是有小夥伴還不知道如何使用python下載二進位制檔案可參考博文:python下載二進位制檔案
當然還有一種方法並不需要編寫程式碼就可以下載,那就是滑鼠右鍵點選綠色箭頭所指檔案,選擇彈出的選項卡中的第一項“Open in new tab”會彈出一個新的頁面
歌曲

在新彈出的頁面中我們點選播放就可以播放該歌曲了,至於要下載,點選最右邊的省略號,會有如下選項卡,點選下載,歌曲便會成功下載了
在這裡插入圖片描述

人窮購買不起VIP,唯有此法,只能說人在江湖,身不由己

當然這種方式屬於純手工操作,我們也可以程式碼下載:

找到綠色箭頭所指的檔案的話,我們有很多途徑可以獲得該歌曲檔案的絕對路徑:
1、右鍵點選該檔案,點選Open in new tab在新開啟的網頁瀏覽器位址列有該檔案的絕對路徑連結地址
2、右鍵點選該檔案,點選Copy>copy link address就可以獲取該音樂檔案的連線地址
以歌曲《可不可以》為例,我們獲取的連結地址為可不可以》mp3
既然知道了連結地址,下載的話就好說,左鍵點選綠色箭頭所指的檔案,我們會看到右側出現很多資訊,如下所示:
在這裡插入圖片描述


通過觀察分析,我們看到該mp3檔案是以get方式請求的,看到這裡,我們就可以寫程式碼下載該音樂了

程式碼

import requests

r = requests.get('http://m10.music.126.net/20181121151228/f0ff54de823b6dad38c3ca5883732c66/ymusic/341e/9cc2/7c4f/b13ac6e62d3625524dde95fd1b1628bf.mp3')

with open('可不可以.mp3','wb') as f:
    f.write(r.content)

執行結果

在這裡插入圖片描述
那到這裡,是不就是可以通過程式碼下載歌曲了呢。

當然作為程式設計師,這麼點程式碼兩肯定是不夠的,爬蟲作為一種爬取資料的手段,其目的是要實現自動化爬取,很明顯前面人工的操作太多了。下面我們讓整個專案更加自動化一點。

隨意選取一首音樂,我們還是以《可不可以》為例
在這裡插入圖片描述
在網易雲音樂中我們知道每首歌曲都有專門的歌曲id。《可不可以》id為553755659,
所以我們可以看到《可不可以》所在的網頁連結為

https://music.163.com/#/song?id=553755659
由此也就推測所有歌曲的網頁連結為https://music.163.com/#/song?id=後面跟上他的id號。不信多開啟幾首歌檢視試試。

那麼知道這個有什麼用呢?
我們知道一個歌曲會有很多資訊,就如網頁上顯示的一樣,有歌曲名、歌詞、歌手等,這些都是從伺服器請求得來的,一般伺服器會將這些資訊組成一個數據快傳送過來。
重新整理介面(按F5)
將紅色方框中選為XHR,我們開啟綠色箭頭所指的檔案,然後點選priview,我們可以看到很多關於此歌曲的資訊。
在這裡插入圖片描述
其中有一項是歌曲的URL
在這裡插入圖片描述
經過比對,這和我們之前得到的連結是一樣的,所以我們有理由相信,這就是《可不可以》的正確檔案地址。
所以說我們是需要型伺服器請求這一個檔案就可,接下來咱們看一下他的響應頭
在這裡插入圖片描述

在這裡插入圖片描述
我們可以看到,響應方式為post,並且傳入了params、encSecKey兩個引數,顯然是加密過的,但是咱們不深究這是如何加密解密,咱們可以直接複製這兩個引數使用就行
話不多說,上程式碼

import requests
import re
import json

'''
    Author: Face_to_sun
    modify: 2018-11-21
'''

def download_MP3(url):
    '''下載歌曲'''
    r = requests.get(url)
    with open('Music\\可不可以.mp3','wb') as f:
        f.write(r.content)

def getUrl():
    '''獲得歌曲URL'''
    r = requests.post(url, headers=headers, data=data)
    response_data = json.loads(r.text)
    print(response_data['data'][0]['url'])
    download_url = response_data['data'][0]['url']
    return download_url

if __name__ == "__main__":
    url = 'https://music.163.com/weapi/song/enhance/player/url?csrf_token='
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36',
        'Host': 'music.163.com',
        'referer': 'https://music.163.com/',
        'Origin': 'https://music.163.com'
    }

    data = {
        'params': 'u6SEfpt2WTDENzie0aJs1c3dzjB1cQjGVERXnkRLnHnsiFSaAdUfeBwu9jeoC6axZjvKyidX7r9S7aoPiyxJ2qJ2X+mygkjnYZM4qYvgyBZAdvqtY7OfVnuMUaAnAG4U',
        'encSecKey': 'c02c3b63f5b129b1891f516ace6e8343e848d9bd15d5494e3be9f116c2b76bc2f430837de91e9fd4eec7aa257763f1a6b6f8f6861364fb8ca77c9dbc376db203ea92ed8a8f2c225e031b581e154b8d85f409b380cf982475abe9b32d5a5d2111e69c6d3599e186fe29afa5183f7b37645395e964e656cc3e8611f559f664ee69'
    }
    url = getUrl()
    download_MP3(url)

在這裡插入圖片描述
閒來發現,在響應回來的檔案中還有歌詞檔案,我們也可以從中下載歌曲的歌詞,不妨試試。

更多有關python爬蟲的內容,請關注博主的專欄python3爬蟲謝謝支援~~