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 相关文章推荐
Windows环境下python环境安装使用图文教程
Mar 13 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
详解django中url路由配置及渲染方式
Feb 25 Python
举例讲解Python常用模块
Mar 08 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
python 录制系统声音的示例
Dec 21 Python
关于python中模块和重载的问题
Nov 02 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实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
Python之py2exe打包工具详解
2017/06/14 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
python二维图制作的实例代码
2020/12/03 Python
党员培训思想汇报
2014/01/07 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
爱国口号
2014/06/19 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
股东授权委托书
2014/10/15 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
Ruby处理CSV数据方法详解
2022/04/18 Ruby