Python打造個人音樂下載器

下載器使用截圖:
在這裏插入圖片描述
源代碼:

import requests
import parsel
import re,os


def get_urls(kd):
    url = 'http://music.taihe.com/search?key=' + kd
    headers = {
        'Connection': 'keep-alive',
        'Cookie': 'BAIDUID=B83397CF85BEFA9562DDA095E11C19C1:FG=1; Hm_lvt_d0ad46e4afeacf34cd12de4c9b553aa6=1581762349; tracesrc=-1%7C%7C-1; u_lo=0; u_id=; u_t=; __51cke__=; __qianqian_pop_tt=7; __tins__19988117=%7B%22sid%22%3A%201581768265452%2C%20%22vd%22%3A%202%2C%20%22expires%22%3A%201581770395998%7D; __51laig__=13; log_sid=1581768919932B83397CF85BEFA9562DDA095E11C19C1; Hm_lpvt_d0ad46e4afeacf34cd12de4c9b553aa6=1581768938',
        'Host': 'music.taihe.com',
        'Referer': 'http://music.taihe.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    select = parsel.Selector(response.text)
    pages = select.xpath('//div[2]/div/div/a[@class="page-navigator-number     PNNW-S"]/text()').getall()[
        -1]  # 判斷當前歌星歌曲頁數
    new_urls = []

    for i in range(int(pages)):  # 此處只能用int(pages),如果是len(pages),長度是1
        # 根據規則構造url,爬取歌星在千千音樂的所有歌曲
        new_urls.append(
            'http://music.taihe.com/search/song?s=1&key=' + str(kd.encode()).replace("b'", '').replace("'", '').replace(
                r'\x', '%').upper() + '&start=' + str(20 * i) + '&size=20&third_type=0')
        response1 = requests.get(new_urls[i], headers=headers)
        response1.encoding = response1.apparent_encoding
        select1 = parsel.Selector(response1.text)
        link = select1.xpath('//div/span[@class="song-title"]/a[1]/@href')  # 再次構建url參數
        title = select1.xpath('//div/span[@class="song-title"]/a[1]/text()')  # 獲取歌曲名稱
        for j in range(len(link)):
            # mp3音樂信息存儲在jQuery下面,我們需要構造url,找到必要參數songid
            url_last = 'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery&songid=' + \
                       link.getall()[j].replace('/song/', '').strip() + '&from=web'
            response_last = requests.get(url=url_last, headers=headers)
            response_last.encoding = response_last.apparent_encoding
            # 因爲用response_last.json()報錯無法解決,所以只好用text
            result = re.findall('"show_link":(.*?)","', response_last.text)
            path = kd
            if not os.path.exists(path):
                os.mkdir(path)
            if len(result) == 0:
                pass
            else:
                result1 = result[0].replace('\\', '').replace('"', '')
                response_end = requests.get(result1)
                with open(path + '/' + title.getall()[j] + '.mp3', mode="wb") as f:
                    f.write(response_end.content)
                print(title.getall()[j] + '\t' + '下載完畢!')

if __name__ == '__main__':
    kd = str(input('請輸入您想查詢的歌星名稱(eg:薛之謙):'))
    get_urls(kd)

具體的軟件獲取方式參考我的微信文章:(百度雲直接在上面易和諧)

https://mp.weixin.qq.com/s?__biz=MzU5OTkzNDMyMQ==&tempkey=MTA0OF96OVpHTm9FN0Z5emhQNERKMjl4QWJ2bGRsTU8zazRSMlZKV2ZyM0ljTGhvMURwWTdWa0h0enVRLTlIWFNVUjU1QzNGZnJ5OUlPaGNxNTNIR2hjR05zNjUxdHp5LVNGM2VmM3oySlZTakZzWDlJVHJMOXVURF9IY3BTODA2T0podGR6YTBOOGFBaTc2OF9yOWNmcnp0Rmw4TFFZaTFyTk5YeFZkTUdBfn4%3D&chksm=7eac175d49db9e4be08f48c56e6e2d6d7f8f99707a5e2b9e8ad9b63da93f9b1dd4a71237e2f7
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章