Python 爬取qqmusic音樂url並批量下載

  

 

 

  qqmusic上的音樂仍是很多的,有些時候想要下載好聽的音樂,但有每次在網頁下載都是煩人的登陸什麼的。因而,來了個qqmusic的爬蟲。html


  至少我以爲for循環爬蟲,最核心的應該就是找到待爬元素所在url吧。下面開始找吧(講的不對不要笑我)python

#尋找url:

  這個url可不想其餘的網站那麼好找。把我給累得不輕,關鍵是數據多,從那麼多數據裏面挑出有用的數據,最後組合爲music真正的music。昨天作的時候整理的幾個中間url:express

#url1:https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&lossless=0&flag_qc=0&p=1&n=20&w=雨蝶json

#url2:https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&[songmid]&C400+songmid+.m4a&guid=6612300644瀏覽器

#url3:http://dl.stream.qqmusic.qq.com/[filename]?vkey=[vkey](其中vkey代替該music特有的字符串)app

requests(url1)

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

requests(url2)

獲得搜索結果中每一個music的vkey值,通過筆者觀察,filename即爲C400songmid.m4a。進而肯定了url3的具體值。而url3即爲音樂的真實url,因爲筆者對此url的其餘參數研究的不夠透徹,所以每次最多返回20首music的url,有了url,那Tencent的music就能夠盡情的享受了。jsonp

 

#代碼

下面來個srcs的代碼塊:網站

 

import requests
import urllib
import json
word = '雨蝶'
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')

 

#下載:

有了srcs,下載天然不成問題。固然獲取歌手以及歌名也是能夠把src複製到瀏覽器下載。也能夠用大Python批量下載,無非就是一個循環,跟咱們前面下載sogou圖片方法相似:(筆者py版本:python3.3.3)ui

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已經成功下載。。。

至此,關於昨天作的qqmusic的url爬蟲程序思路及實現敘述完畢。

#用途:

  musicplayer作好殼子的同窗,應該用得上吧。其實作這個初衷是要爲個人基於html的musicplayer服務的。但如今卡在了js調用py的環節,我再找找吧,明白的同窗望告知,萬分感謝!

 

相關文章
相關標籤/搜索