如何基于Python批量下载音乐


Posted in Python onNovember 11, 2019

这篇文章主要介绍了如何基于Python批量下载音乐,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

音乐是生活的调剂品,目前很多的音乐只能播放不能下载。生为技术员的我们,怎么甘心呢?

知识点:

  • requests
  • 正则表达式

开发环境:

  • 版 本:anaconda5.2.0(python3.6.5)
  • 编辑器:pycharm

第三方库:

  • requests
  • parsel

网页分析

目标站点:http://music.taihe.com/search?key=%E9%99%88%E7%B2%92

分析音乐的真实地址

选择一首歌 以陈粒的走马为例

如何基于Python批量下载音乐

打开开发者工具,选择network -> media -> 刷新网页就能获取到音乐的真实地址

但是得到的地址在查看源码中是读取不到的,肯定是百度音乐对其进行了隐藏。这种时候一般会有两种情况。第一种是使用了 JavaScript 对请求连接进行了拼接或加密,第二种是数据被隐藏了。由于我们不清楚是出现了那种情况。所以我们只能慢慢的去分析请求的数据。

如何基于Python批量下载音乐如何基于Python批量下载音乐

经过分析我们可以看到真实的音乐地址是存在于这个API里面http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery17206453751179783578_1544942124991&songid=243093242&from=web&_=1544942128336

并且我们请求这个 API 返回的是一个 json 数据(也就是python的字典数据类型)。只要我们使用字典的规则就能将我们的所有数据给提取到。

url拼接 获取所有数据

前面我们得到了音乐的真实地址,接下来我们就是分析真实地址的 url ,以期待得到下载所有音乐的诀窍。

如何基于Python批量下载音乐如何基于Python批量下载音乐

仔细分析一下 url 就可以发现,?后面的from参数与_即使不存在也不影响数据的请求。

并且后面的参数中的songid其实就是歌曲的唯一id,from参数其实就是表明从哪个平台过来的

所以等一下我们下载音乐时,只要批量获取到歌曲的songid就能将所有的歌曲给全部下载下来了。

批量获取singid

如何基于Python批量下载音乐 

使用开发者工具,查看网页源码就能查看到songid的位置,如果我们分析一个歌手页面的url你会发现同样可以构造。

到此,整个网页分析就结束了。

实现效果

如何基于Python批量下载音乐 如何基于Python批量下载音乐

完整代码

import re
import requests
​
def get_songid():
  """获取音乐的songid"""
  url = 'http://music.taihe.com/artist/2517'
  response = requests.get(url=url)
  html = response.text
  sids = re.findall(r'href="/song/(\d+)" rel="external nofollow" ', html)
  return sids
​
def get_music_url(songid):
  """获取下载链接"""
  api_url = f'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&songid={songid}&from=web'
  response = requests.get(api_url.format(songid=songid))
  data = response.json()
  print(data)
  try:
    music_name = data['songinfo']['title']
    music_url = data['bitrate']['file_link']
    return music_name, music_url
  except Exception as e:
    print(e)
​
def download_music(music_name, music_url):
  """下载音乐"""
  response = requests.get(music_url)
  content = response.content
  save_file(music_name+'.mp3', content)
​
def save_file(filename, content):
  """保存音乐"""
  with open(file=filename, mode="wb") as f:
    f.write(content)
if __name__ == "__main__":
  for song_id in get_songid():
    music_name, music_url = get_music_url(song_id)
    download_music(music_name, music_url)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python类的专用方法实例分析
Jan 09 Python
机器学习10大经典算法详解
Dec 07 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
Python玩转PDF的各种骚操作
May 06 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
Python识别验证码的实现示例
Sep 30 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
Django 如何实现文件上传下载
Apr 08 Python
python numpy中multiply与*及matul 的区别说明
May 26 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 #Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 #Python
Python序列化与反序列化pickle用法实例
Nov 11 #Python
详解Python可视化神器Yellowbrick使用
Nov 11 #Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 #Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 #Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 #Python
You might like
基于mysql的论坛(7)
2006/10/09 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php制作文本式留言板
2015/03/18 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
php命令行模式代码实例详解
2021/02/26 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
javascript事件问题
2009/09/05 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
python实现猜单词小游戏
2020/05/22 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
python计算无向图节点度的实例代码
2019/11/22 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
运动会获奖感言
2014/02/11 职场文书
《我的信念》教学反思
2014/02/15 职场文书
如何写好建议书
2014/03/13 职场文书
党课培训心得体会
2014/09/02 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
深入理解go slice结构
2021/09/15 Golang
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript