qqmusic上的音乐仍是很多的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登陆什么的。因而,来了个qqmusic的爬虫。html
至少我以为for循环爬虫,最核心的应该就是找到待爬元素所在url吧。下面开始找吧(讲的不对不要笑我)python
这个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的环节,我再找找吧,明白的同窗望告知,万分感谢!