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 截取 取出一部分的字符串方法
Mar 01 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
python MNIST手写识别数据调用API的方法
Aug 08 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
Python面向对象之类和对象实例详解
Dec 10 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
python生成器推导式用法简单示例
Oct 08 Python
python实现两个一维列表合并成一个二维列表
Dec 02 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
Python面向对象编程之类的概念
Nov 01 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 XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php统计文章排行示例
2014/03/04 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
Python collections模块实例讲解
2014/04/07 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
七年级英语教学反思
2014/01/15 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
出纳员的岗位职责
2014/02/22 职场文书
助学贷款贫困证明
2014/09/23 职场文书
博士生专家推荐信
2014/09/26 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
KVM基础命令详解
2022/04/30 Servers