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中dictionary items()系列函数的用法实例
Aug 21 Python
Python查找相似单词的方法
Mar 05 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
python 提取key 为中文的json 串方法
Dec 31 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 Python
基于python和flask实现http接口过程解析
Jun 15 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
Python 高效编程技巧分享
Sep 10 Python
Python爬虫开发与项目实战
Dec 16 Python
Python中lru_cache的使用和实现详解
Jan 25 Python
Python如何实现Paramiko的二次封装
Jan 30 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高级OOP技术演示
2009/08/27 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
jquery ui对话框实例代码
2013/05/10 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
详解python单例模式与metaclass
2016/01/15 Python
Python 性能优化技巧总结
2016/11/01 Python
python针对excel的操作技巧
2018/03/13 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python学习小技巧总结
2018/06/10 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python基于openpyxl生成excel文件
2020/12/23 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
车间统计员岗位职责
2014/01/05 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
教师个人教学反思
2016/02/23 职场文书
golang正则之命名分组方式
2021/04/25 Golang
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android