Python爬取QQ音樂url及批量下載

來源:互聯網
上載者:User

標籤:通過   play   exce   列表   for迴圈   結果   start   思路   lis   

QQ音樂還是有不少的好音樂,有些時候想要下載好聽的音樂,如果在網頁下載都是還需要登入什麼的。於是,來了個QQmusic的爬蟲。至少我覺得for迴圈爬蟲,最核心的應該就是找到待爬元素所在url吧。

參考幾個中間url:

#url1:https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&lossless=0&flag_qc=0&p=1&n=20&w=雨蝶#url2:https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&[songmid]&C400+songmid+.m4a&guid=6612300644#vkey代替該music特有的字串#url3:http://dl.stream.qqmusic.qq.com/[filename]?vkey=[vkey]

requests(url1)由搜尋列表得到每個音樂的的songmid和mid(通過筆者觀察,這兩個值是每一個music特有的)。有了這兩個值。下面就得到了完整的url2的具體值。

requests(url2)得到搜尋結果中每個music的vkey值,經過筆者觀察,filename即為C400songmid.m4a。進而確定了url3的具體值。而url3即為音樂的真實url,每次最多返回20首music的url,有了url,那Tencent的music就可以盡情的享受了。

下面代碼是參考的網上的代碼:

import requestsimport urllibimport jsonword = ‘雨蝶‘res1 = requests.get(‘https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=‘+word)jm1 = json.loads(res1.text.strip(‘callback()[]‘))jm1 = jm1[‘data‘][‘song‘][‘list‘]mids = []songmids = []srcs = []songnames = []singers = []for j in jm1:    try:        mids.append(j[‘media_mid‘])        songmids.append(j[‘songmid‘])        songnames.append(j[‘songname‘])        singers.append(j[‘singer‘][0][‘name‘])    except:        print(‘wrong‘)for n in range(0,len(mids)):    res2 = requests.get(‘https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=‘+songmids[n]+‘&filename=C400‘+mids[n]+‘.m4a&guid=6612300644‘)    jm2 = json.loads(res2.text)    vkey = jm2[‘data‘][‘items‘][0][‘vkey‘]    srcs.append(‘http://dl.stream.qqmusic.qq.com/C400‘+mids[n]+‘.m4a?vkey=‘+vkey+‘&guid=6612300644&uin=0&fromtag=66‘)

有了上面的這段代碼,下載自然不成問題。當然擷取歌手以及歌名也是可以把src複製到瀏覽器下載。也可以用大Python批量下載,無非就是一個迴圈,跟我們前面下載sogou圖片方法類似:

print(‘For ‘+word+‘ Start download...‘)    x = len(srcs)for m in range(0,x):    print(str(m)+‘***** ‘+songnames[m]+‘ - ‘+singers[m]+‘.m4a *****‘+‘ Downloading...‘)    try:        urllib.request.urlretrieve(srcs[m],‘d:/music/‘+songnames[m]+‘ - ‘+singers[m]+‘.m4a‘)    except:        x = x - 1        print(‘Download wrong~‘)print(‘For [‘+word+‘] Download complete ‘+str(x)+‘files !‘)

以上兩段代碼,寫在同一py檔案,運行即可下載對應關鍵詞的music

運行代碼,開始下載:

 查看下載目錄:

我們看到music已經成功下載,這就是Python爬取QQ音樂url及批量下載的簡單實現思路。

 

Python爬取QQ音樂url及批量下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.