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中的浅拷贝和深拷贝
May 30 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
Python检查ping终端的方法
Jan 26 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
Python turtle实现贪吃蛇游戏
Jun 18 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计算两个路径的相对路径
2013/06/14 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Python中自定义函数的教程
2015/04/27 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
python 显示数组全部元素的方法
2018/04/19 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python中文编码知识点
2019/02/18 Python
python Shapely使用指南详解
2020/02/18 Python
Python各种扩展名区别点整理
2020/02/27 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
python如何导入依赖包
2020/07/13 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
北大自主招生自荐信
2015/03/04 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python