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 相关文章推荐
解决DataFrame排序sort的问题
Jun 07 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
python tornado使用流生成图片的例子
Nov 18 Python
Python变量作用域LEGB用法解析
Feb 04 Python
python lambda函数及三个常用的高阶函数
Feb 05 Python
快速解决jupyter启动卡死的问题
Apr 10 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python 爬虫请求模块requests详解
Dec 04 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
Python实现照片卡通化
Dec 06 Python
python 安全地删除列表元素的方法
Mar 16 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP _construct()函数讲解
2019/02/03 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
接收键盘指令的脚本
2006/06/26 Javascript
javascript读取xml
2006/11/04 Javascript
jquery select选中的一个小问题
2009/10/11 Javascript
jQuery 渐变下拉菜单
2009/12/15 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
Python中正则表达式的用法实例汇总
2014/08/18 Python
Python聊天室程序(基础版)
2018/04/01 Python
高效使用Python字典的清单
2018/04/04 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
pandas分区间,算频率的实例
2019/07/04 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
幼儿园新学期寄语
2014/01/18 职场文书
文明寄语大全
2014/04/11 职场文书
经典禁毒标语
2014/06/16 职场文书
党校学习党性分析材料
2014/12/19 职场文书
答谢酒会主持词
2015/07/02 职场文书