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 13 Python
Python简单实现enum功能的方法
Apr 25 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
Django实现全文检索的方法(支持中文)
May 14 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
python设置随机种子实例讲解
Sep 12 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
Python中Yield的基本用法
Oct 18 Python
scrapy实践之翻页爬取的实现
Jan 05 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伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
python实现的各种排序算法代码
2013/03/04 Python
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Python 多线程Threading初学教程
2017/08/22 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python如何代码集体右移
2020/07/20 Python
python 实现简易的记事本
2020/11/30 Python
python文件路径操作方法总结
2020/12/21 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
小学门卫岗位职责
2013/12/17 职场文书
给孩子的新年寄语
2014/04/08 职场文书
实验室的标语
2014/06/20 职场文书
个人工作保证书
2015/02/28 职场文书
大学生逃课检讨书
2015/05/04 职场文书
病房管理制度范本
2015/08/06 职场文书
清明扫墓感想
2015/08/11 职场文书