1. 程式人生 > >Python 爬取qqmusic音樂url並批量下載

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

QQ col expr IE filename 代碼 都是 sles ()

 qqmusic上的音樂還是不少的,有些時候想要下載好聽的音樂,但有每次在網頁下載都是煩人的登錄什麽的。於是,來了個qqmusic的爬蟲。


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

#尋找url:

  這個url可不想其他的網站那麽好找。把我給累得不輕,關鍵是數據多,從那麽多數據裏面挑出有用的數據,最後組合為music真正的music。昨天做的時候整理的幾個中間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+.m4a&guid=6612300644

#url3:http://dl.stream.qqmusic.qq.com/ 由搜索列表得到每個音樂的的songmid和mid(通過筆者觀察,這兩個值是每一個music特有的)。有了這兩個值。下面就得到了完整的url2的具體值。

requests(url2)

得到搜索結果中每個music的vkey值,經過筆者觀察,filename即為C400songmid.m4a。進而確定了url3的具體值。而url3即為音樂的真實url,由於筆者對此url的其他參數研究的不夠透徹,因此每次最多返回20首music的url,有了url,那Tencent的music就可以盡情的享受了。

代碼:

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‘)
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:/音樂/‘+songnames[m]+‘ - ‘+singers[m]+‘.mp3‘)
except:
x = x - 1
print(‘Download wrong~‘)
print(‘For [‘+word+‘] Download complete ‘+str(x)+‘files !‘)

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