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的dict,set,list,tuple应用详解
Jul 24 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
python调用matlab的m自定义函数方法
Feb 18 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python csv文件的读写操作实例详解
Nov 19 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
Python中rapidjson参数校验实现
Jul 25 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 header函数使用教程
2013/09/05 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
python中pip的安装与使用教程
2018/08/10 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
简单的命令查看安装的python版本号
2020/08/28 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
高中化学教学反思
2014/01/13 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
工会主席事迹材料
2014/06/03 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
公司的力量观后感
2015/06/05 职场文书
学困生转化工作总结
2015/08/13 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
JUnit5常用注解的使用
2021/07/02 Java/Android
python保存图片的四个常用方法
2022/02/28 Python
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL