码迷,mamicode.com
首页 > 编程语言 > 详细

Python爬取QQ音乐url及批量下载

时间:2018-02-13 18:50:08      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:通过   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 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)

有了上面的这段代码,下载自然不成问题。当然获取歌手以及歌名也是可以把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及批量下载

标签:通过   play   exce   列表   for循环   结果   start   思路   lis   

原文地址:https://www.cnblogs.com/wrpuser/p/8447005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!