1. 程式人生 > >【實戰】下載歌曲只能開綠鑽?NoNoNo, Python爬蟲,無所不能。

【實戰】下載歌曲只能開綠鑽?NoNoNo, Python爬蟲,無所不能。

引言

給大家帶來絕對福利,之前在某Q音樂上聽歌,如果想要下載某首歌曲,總是提示小編開通綠鑽,作為一個爬蟲愛好者,怎麼可能花這冤枉錢呢?所以,辦法總是人想的,具體過程就不多說了,最終結果就是通過100行程式碼,可以下載只有綠鑽才能下載的歌曲哦~

 

原始碼

連結:https://pan.baidu.com/s/1Ti-ybrquCf3X7qGPcdAEQA 密碼:d2zr

 

責任宣告

本程式碼只用於學習交流,嚴謹用於其他用途。所造成的責任影響不歸本人負責。

 

實現功能

通過指定歌曲名稱,可以將搜尋結果第一頁中的歌曲下載完成。

 

部分原始碼

def parse_17(song_name):
    base_url = "https://c.y.qq.com/soso/fcgi-bin/client_search_cp"

    r = requests.get(base_url,params=parames,headers=headers)

    return_data = r.text
    pattern_17 = re.compile('\\((.*)?\\)')
    return_data_json = eval(pattern_17.search(return_data)[0].replace("null","None"))
    data = return_data_json["data"]["song"]["list"]
    for n,d in enumerate(data):
        songmid = (d['songmid'])
        strMediaMid = (d['strMediaMid'])

        parse_17_2 (songmid,strMediaMid,n+1,song_name)

 

def parse_17_2(songmid,strMediaMid,n,song_name):

    base_url2 = "https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg"
    r = requests.get(base_url2,params=params_2,headers=headers)
    return_data = r.text
    pattern_17 = re.compile('\\((.*)?\\)')
    return_data_json = eval(pattern_17.search(return_data)[0].replace("null","None"))
    data = return_data_json["data"]["items"][0]
    filename = data['filename']
    vkey = data['vkey']

    parse_17_3(filename,vkey,n,song_name)

 

def parse_17_3(filename,vkey,n,song_name):
    url = "http://dl.stream.qqmusic.qq.com/"
    url = url + filename
    params = {
        'vkey': vkey ,
        'guid': '8208467632' ,
        'uin':'0'  ,
        'fromtag':'66'
    }

    r = requests.get(url,params=params,headers=headers)
    filename = song_name + str(n) + ".m4a"
    with open(filename,"wb") as f :
        f.write(r.content)
    print("第%s首歌曲下載完成"%n)