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 相关文章推荐
Django框架中处理URLconf中特定的URL的方法
Jul 20 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python做简单的字符串匹配详解
Mar 21 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
python sys.argv[]用法实例详解
May 25 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
May 21 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
Python的pygame安装教程详解
Feb 10 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
python tkinter Entry控件的焦点移动操作
May 22 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绘图中显示不出图片的原因及解决
2014/03/05 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
js中判断控件是否存在
2010/08/25 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
js函数排序的实例代码
2013/07/01 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
js时间控件只显示年月
2017/01/08 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
python开发中range()函数用法实例分析
2015/11/12 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
Django model update的多种用法介绍
2020/03/28 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
django正续或者倒序查库实例
2020/05/19 Python
python pymysql库的常用操作
2020/10/16 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
2015年教师节贺卡寄语
2015/03/24 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
初中语文教师研修日志
2015/11/13 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
python画条形图的具体代码
2022/04/20 Python