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中的异常处理
Apr 28 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
Python读写及备份oracle数据库操作示例
May 17 Python
Python交互环境下实现输入代码
Jun 22 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
Python3监控疫情的完整代码
Feb 20 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
python基于selenium爬取斗鱼弹幕
Feb 20 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维护文件系统
2006/10/09 PHP
社区(php&&mysql)六
2006/10/09 PHP
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
js中eval详解
2012/03/30 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
Django中使用group_by的方法
2015/05/26 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
django列表筛选功能的实现代码
2020/03/27 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
Python unittest框架操作实例解析
2020/04/13 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
经理助理岗位职责
2014/03/05 职场文书
环保标语口号
2014/06/13 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
大学迎新生标语
2014/10/06 职场文书
员工工作及收入证明
2014/10/28 职场文书
会计专业自荐信范文
2015/03/05 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
element多个表单校验的实现
2021/05/27 Javascript