Python爬取qq music中的音乐url及批量下载


Posted in Python onMarch 23, 2017

前言

qq music上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的。于是,来了个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]&C400+songmid+.m4a&guid=6612300644

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

requests(url1)

由搜索列表得到每个音乐的的songmid和mid(通过笔者观察,这两个值是每一个music特有的)。有了这两个值。下面就得到了完整的url2的具体值。

requests(url2)

得到搜索结果中每个music的vkey值,经过笔者观察,filename即为C400songmid.m4a。进而确定了url3的具体值。而url3即为音乐的真实url,由于笔者对此url的其他参数研究的不够透彻,因此每次最多返回20首music的url,有了url,那Tencent的music就可以尽情的享受了。

#代码

下面来个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)

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

#运行效果:

Python爬取qq music中的音乐url及批量下载 

下载开始,下面...到下载目录看看:

Python爬取qq music中的音乐url及批量下载

music已经成功下载。。。

至此,关于qqmusic的url爬虫程序思路及实现叙述完毕。

#用途:

musicplayer做好壳子的同学,应该用得上吧。其实做这个初衷是要为我的基于html的musicplayer服务的。但现在卡在了js调用py的环节,我再找找吧,明白的同学望告知,万分感谢!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中的对象,方法,类,实例,函数用法分析
Jan 15 Python
编写Python的web框架中的Model的教程
Apr 29 Python
python简单的函数定义和用法实例
May 07 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
python实现txt文件格式转换为arff格式
May 31 Python
python获取代码运行时间的实例代码
Jun 11 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python集合的新增元素方法整理
Dec 07 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 #Python
Python编程之event对象的用法实例分析
Mar 23 #Python
Python中.py文件打包成exe可执行文件详解
Mar 22 #Python
python3中dict(字典)的使用方法示例
Mar 22 #Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 #Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 #Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 #Python
You might like
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
js实现div色块碰撞
2020/01/16 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
如何通过python实现全排列
2020/02/11 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
python实现取余操作的简单实例
2020/08/16 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
JBL英国官网:JBL UK
2018/07/04 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
盛大笔试题
2016/11/05 面试题
文秘人员工作职责
2014/01/31 职场文书
技校毕业生自荐信
2014/06/03 职场文书
领导干部失职检讨书
2015/05/05 职场文书
员工规章制度范本
2015/08/07 职场文书