VIP音樂免費下載

VIP音樂免費下載

很久沒有更新博客了,今天我就來寫一個爬蟲吧。若是你是那種喜歡緩存歌,喜歡聽歌的人,你必定遇到過這種狀況,因爲版權緣由沒法播放(緩存)此歌曲,或者是請使用客戶端下載(emmm,有些下載客戶端也不能下載)。因此,爲了世界的幸福感,爲了守護世界的和平,貫徹愛與真實的邪惡,可愛又迷人的反派角色,emmm,對不起跑題了,今天我就寫一個,突破這種限制的小小小音樂爬蟲,So Just have fun again…web

就拿杰倫的這首稻香,當你點擊播放的時候,就顯示下面這個界面,沒法播放json

img

因此有了這篇博客的由來。api

網頁分析

先拿一首能播放的音樂,就拿這首薛之謙的《剛恰好》來分析,進入這個頁面右鍵檢查,或者按F12進入開發者調試界面,再選中Network,你應該就能看到下面這個界面(若是不能,你就刷新頁面)緩存

img

上面那個歌曲連接,若是你直接去訪問應該是就直接下載了,可是這樣對稻香這種歌,根本不能播放,就不會去接受數據播放音樂,也就是說不會有這個url連接svg

img

可是,莫慌,慢慢來jsonp

咱們先來看看它是如何接受這首歌的地址,咱們先你前面選中的Media換成All,而後刷新頁面,這個時候你確定看到亂七八糟的’東西’,以下url

img

這個時候不能腦袋疼,這些只是你刷新頁面後接受的數據,咱們要的東西必定就是在這裏面,因此,咱們就要進行篩選,這裏我就簡單說一種,你點擊size,讓它從大到小排序。。。這個時候,你應該就更能看清了,調試

img

第一個數據那麼大,你點擊進去發現,就是前面咱們找到的歌曲url,顯然不是咱們如今要的數據。因此,咱們接着往下找,一個個點擊進去,並點Preview(這樣看更加直觀),分別是一個個圖片,直到點到這個rest

img

Preview,咱們就能更加確定是咱們要找的數據包code

img

把前面的URL地址複製下來直接去訪問看看,發現就是咱們要的數據((。-_-。),總算找到了)

img

找到了之後,此次的博客咱們就能夠寫代碼了

代碼部分

思路已經講清,就簡單展現下咱們的code。由於每一個人的寫代碼思路不一樣就不詳述了

"""
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…

img

img




以上就是此次博客的一點小小內容了,你能夠進行設當的擴展,如只須要輸入歌手的名稱就下載所有該歌手的音樂(emmm,原本想寫的,乏了,這種重任就交給大家了),能夠給一點思路,獲取頁面,找到全部的歌曲id,搜索就更簡單了,構造url 例如薛之謙的搜索界面是這樣的 click me,是否是很簡單So,Just have fun…