python怎么下载⽹络歌曲_教你如何⽤Python批量下载⾃⼰喜
欢听得⾳乐
⽂的⽂字及图⽚来源于⽹络,仅供学习、交流使⽤,不具有任何商业⽤途,版权归原作者所有,如有问题请及时以作处理。
⾳乐是⽣活的调剂品,⽬前很多的⾳乐只能播放不能下载。⽣为技术员的我们,怎么⽢⼼呢?
知识点:requests
正则表达式
开发环境:版 本:anaconda5.2.0(python3.6.5)
编辑器:pycharm
第三⽅库:requests
parsel
⽹页分析如何下载javascript
⽬标站点:千千⾳乐
分析⾳乐的真实地址
选择⼀⾸歌 以陈粒的⾛马为例
打开开发者⼯具,选择network -> media -> 刷新⽹页就能获取到⾳乐的真实地址
但是得到的地址在查看源码中是读取不到的,肯定是百度⾳乐对其进⾏了隐藏。这种时候⼀般会有两种情况。第⼀种是使⽤了 JavaScript 对请求连接进⾏了拼接或加密,第⼆种是数据被隐藏了。由于我们不清楚是出现了那种情况。所以我们只能慢慢的去分析请求的数据。
并且我们请求这个 API 返回的是⼀个 json 数据(也就是python的字典数据类型)。只要我们使⽤字典的规则就能将我们的所有数据给提取到。
url拼接 获取所有数据
前⾯我们得到了⾳乐的真实地址,接下来我们就是分析真实地址的 url ,以期待得到下载所有⾳乐的诀窍。教你如何⽤Python批量下载⾃
⼰喜欢听得⾳乐
仔细分析⼀下 url 就可以发现,?后⾯的from参数与_即使不存在也不影响数据的请求。
并且后⾯的参数中的songid其实就是歌曲的唯⼀id,from参数其实就是表明从哪个平台过来的
所以等⼀下我们下载⾳乐时,只要批量获取到歌曲的songid就能将所有的歌曲给全部下载下来了。
批量获取singid
使⽤开发者⼯具,查看⽹页源码就能查看到songid的位置,如果我们分析⼀个歌⼿页⾯的url你会发现同样可以构造。
到此,整个⽹页分析就结束了。
实现效果
image
完整代码
import reimport requestsdef get_songid():
"""获取⾳乐的songid"""
url = 'music.taihe/artist/2517'
response = (url=url)
html =
sids = re.findall(r'href="/song/(\d+)"', html) return sidsdef get_music_url(songid):
"""获取下载链接"""
api_url = f'musicapi.taihe/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&songid= {songid}&from=web'
response = (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 = (music_url)
content = t
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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论