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基于multiprocessing的多进程创建方法
Jun 04 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
用python制作游戏外挂
Jan 04 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
Sep 04 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
Python更新所有已安装包的操作
Feb 13 Python
python requests.get带header
May 05 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
最新pycharm安装教程
Nov 18 Python
Flask处理Web表单的实现方法
Jan 31 Python
总结Python连接CS2000的详细步骤
Jun 23 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
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
js实现随机抽奖
2020/03/19 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python安装pil库方法及代码
2019/06/25 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
集体婚礼证婚词
2014/01/13 职场文书
写给老婆的检讨书
2014/02/21 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
80后婚前协议书范本
2014/10/24 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
2015年中个人总结范文
2015/03/10 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书