VIP音乐免费下载
好久没有更新博客了,今天我就来写一个爬虫吧。如果你是那种喜欢缓存歌,喜欢听歌的人,你一定遇到过这种情况,由于版权原因无法播放(缓存)此歌曲
,或者是请使用客户端下载
(emmm,有些下载客户端也不能下载)。所以,为了世界的幸福感,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,emmm,对不起跑题了,今天我就写一个,突破这种限制的小小小音乐爬虫,So Just have fun again…
就拿杰伦的这首稻香,当你点击播放的时候,就显示下面这个界面,无法播放
所以有了这篇博客的由来。
网页分析
先拿一首能播放的音乐,就拿这首薛之谦的《刚刚好》来分析,进入这个页面右键检查
,或者按F12
进入开发者调试界面,再选中Network
,你应该就能看到下面这个界面(如果不能,你就刷新页面)
上面那个歌曲链接,如果你直接去访问应该是就直接下载了,但是这样对稻香这种歌,根本不能播放,就不会去接受数据播放音乐,也就是说不会有这个url链接
但是 ,莫慌,慢慢来
我们先来看看它是如何接受这首歌的地址,我们先你前面选中的Media
换成All
,然后刷新页面,这个时候你肯定看到乱七八糟的’东西’,如下
这个时候不能脑壳疼,这些只是你刷新页面后接受的数据,我们要的东西一定就是在这里面,所以,我们就要进行筛选,这里我就简单说一种,你点击size
,让它从大到小排序。。。这个时候,你应该就更能看清了,
第一个数据那么大,你点击进去发现,就是前面我们找到的歌曲url,显然不是我们现在要的数据。所以,我们接着往下找,一个个点击进去,并点Preview
(这样看更加直观),分别是一个个图片,直到点到这个
点Preview
,我们就能更加肯定是我们要找的数据包
把前面的URL地址复制下来直接去访问看看,发现就是我们要的数据((。-_-。),总算找到了)
找到了以后,这次的博客我们就可以写代码了
代码部分
思路已经讲清,就简单展示下我们的code。因为每个人的写代码思路不同就不详述了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 """ author:lightfish time:2018.12.19 note:千千音乐的批量下载 """ import requests import re import json def get_music_resource(songid): """ :param songid: 歌曲的id :return: 因为我们爬取的数据并不是规范的json格式数据,所以我们就得进行适当的处理,让他变成 规范的json格式数据,这里,我用的是正则方法 """ search_url = 'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery172047648654448286276_1545221906467&songid={}'.format( songid) response = requests.get(search_url).text res = re.findall(r'\((.*)\)', response)[0] res_json = json.loads(res) return res_json def get_music_info(jsondata): songinfo = jsondata['songinfo'] music_title = songinfo['title'] print('歌名: ' + music_title) music_compose = songinfo['compose'] print('作者: ' + music_compose) album_title = songinfo['album_title'] print('专辑: ' + album_title) avatar = songinfo['artist_list'][0]['avatar_s300'] if songinfo['artist_list'][0]['avatar_s300'] else '' print('头像: ' + avatar) music_language = songinfo['language'] if songinfo['language'] else '' print('语种: ' + music_language) music_country = songinfo['country'] if songinfo['country'] else '' print('国家: ' + music_country) music_url = jsondata['bitrate']['file_link'] print(music_url) return music_title, music_url def music_download(filename, url): with open(filename + '.mp3', 'wb') as f: f.write(requests.get(url).content) if __name__ == '__main__': songid = input('请输入歌曲的id: ') data = get_music_resource(songid) music_title, music_url = get_music_info(data) is_download = input('是否下载(y/n): ') if is_download.lower() == 'y': music_download(music_title, music_url) print('下载完成,Just for fun...') elif is_download.lower() == 'n': print('Just for fun...') else: print('emmm ,exiting...')
成功截图
emmm,忽然发现都快忘了我们周董的《稻香》了,其实是一样的,也有着songid,你去访问也是能获得你想要的链接地址。anywhere,Just for fun…
以上就是这次博客的一点小小内容了,你可以进行设当的扩展,如只需要输入歌手的名称就下载全部该歌手的音乐(emmm,本来想写的,乏了,这种重任就交给你们了),可以给一点思路,获取页面,找到所有的歌曲id,搜索就更简单了,构造url 例如薛之谦的搜索界面是这样的 click me ,是不是很简单 So,Just have fun…