python自动下载酷狗音乐_python实现酷狗音乐mp3下载
在python實現千千音樂mp3下載后小伙伴使用發現很多音樂在千千音樂都搜不到,所以今天春江暮客就拓展了一下酷狗音樂的下載,有源碼。
同樣的配方,首先在酷狗官網上直接搜索歌曲,然后打開谷歌瀏覽器的網絡監視器,再次搜索同樣的關鍵字就可以發現接口信息(注:此處最好再次搜索的時候查看網絡,可以剔除很多多余的信息)。
1.分析搜索接口信息
只有4條網絡請求,可以很方便的知道是第一條請求是真正的返回了歌曲信息,因此構造此條請求即可。
請求詳細信息,在看了千千音樂的文章后,相信大家也熟悉了,callback是前面加上13位的timestamp時間戳,_為13位的timestamp時間戳。
2.分析播放接口信息
到這里已經知道了搜索的詳細請求以及結果,接下來看音樂下載地址,點擊第一首歌曲播放
只需要使用json解析結果然后獲取信息,json_page_source[“data”][“list”][0][“AlbumID”]和json_page_source[“data”][“list”][0][“FileHash”]即可獲取下載所需信息。
直接查看網絡,刷新,查看網絡連接,從茫茫多的請求中找到真正的獲取mp3地址的請求。
同樣是json,同樣的配方。play_url為mp3地址,lyc歌詞信息直接以文本格式返回,lyrics。json_page_source[“data”][“play_url”]得到mp3地址,json_page_source[“data”][“lyrics”]獲取lrc歌詞。
3.python實現搜索下載
接口分析清楚了,就可以直接上python了,這里酷狗對爬蟲限制比較嚴格,不知道為什么requests獲取不到信息,因此借助萬能的selenium實現調用瀏覽器獲取源碼,然后mp3再用requests下載。上代碼
#!env python
# -*- coding: utf-8 -*-
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re,json,time,sys,os
CHROME_PATH = os.getcwd()+"/chromedrive"
#print(CHROME_PATH)
def helpmessage():
msg = r'''
/\ /\ /\ /\
/\//\\/\ /\//\\/\ /\//\\/\ /\//\\/\
/\//\\\///\\/\//\\\///\\/\//\\\///\\/\//\\\///\\/\
//\\\//\/\\///\\\//\/\\///\\\//\/\\///\\\//\/\\///\\
\\//\/ \/\\//
\/ 本程序由 春江暮客 \/
/\ 發布在www.bobobk.com 上 /\
//\\ 程序打開后會打開網站 //\\
\\// 大家不要急著關閉 \\//
\/ 作者:春江暮客 \/
/\ 酷狗音樂下載 /\
//\\ 用法看程序運行時界面 //\\
\\// 如有任何疑問請在 \\//
\/ 博客頁面留言或者發郵件到 \/
/\ 2180614215@qq.com /\
//\\ 下載的音樂僅供學習交流 //\\
\\// 嚴禁用于商業用途 \\//
\/ 請于24小時內刪除 \/
/\ /\
//\\/\ /\//\\
\\///\\/\//\\\///\\/\//\\\///\\/\//\\\///\\/\//\\\//
\/\\///\\\//\/\\///\\\//\/\\///\\\//\/\\///\\\//\/
\/\\//\/ \/\\//\/ \/\\//\/ \/\\//\/
\/ \/ \/ \/
'''
print(msg)
#####圖案由boxes生成,不懂請看https://www.bobobk.com/185.html
def get_kugou_mp3_address_and_download(song_hash,albumid):
apiurl= "https://wwwapi.kugou.com/yy/index.php"
chrome_url = apiurl+"?"+"r=play/getdata&hash=%s&album_id=%s" % (song_hash,albumid)
browser = webdriver.Chrome(CHROME_PATH)
browser.get(chrome_url)
text = json.loads(browser.page_source.split("")[1].split("")[0])
browser.close()
song_address = text["data"]["play_url"]
songname = text["data"]["author_name"]+"_"+text["data"]["album_name"]+"_"+text["data"]["song_name"]
mp3w = open(songname+".mp3",'wb')
mp3r = requests.get(song_address)
for chunk1 in mp3r.iter_content(chunk_size=512 * 1024):
if chunk1:
mp3w.write(chunk1)
mp3w.close()
lrc = open(songname + ".lrc",'w')
lrc.write(text["data"]["lyrics"])
lrc.close()
def search_music(keyword):
if keyword in ["exit",u"退出"]:
print(u"你選擇了退出當前程序")
sys.exit(0)
callback = "jQuery112404564878798811507_"+str(round(time.time()*1000))
hua = str(round(time.time()*1000))
basic_url = 'https://songsearch.kugou.com/song_search_v2?'
kugou_s_url = basic_url + "callback=%s&keyword=%s&page=1&pagesize=40&userid=-1&clientver=2.7.8&platform=WebFilter&tag=em&filter=2&iscorrection=7&privilege_filter=0&_=%s" % (callback,keyword,hua)
browser = webdriver.Chrome(CHROME_PATH)
browser.get(kugou_s_url)
songlist = json.loads(browser.page_source.split(callback)[1].split("...")[0][1:-2].strip())["data"]["lists"]##...由于網頁展示問題被替換
browser.close()
return songlist
def main():
while True:
song = input(u"請輸入想要下載的音樂或歌手或專輯...名稱: ").strip()
if song!="":
break
songlist = search_music(song)
page = 1
print("\n搜索結果如下")
for i in range(len(songlist)):
print("%d:%s_%s_%s" % (i+1,songlist[i]["SingerName"].replace("","").replace("em",'').replace("/",'').strip(),songlist[i]["AlbumName"],songlist[i]["SongName"].replace("","").replace("em",'').replace("/",'')))
print("\n")
while True:
songid = input(u'請選擇想要下載的歌曲前面的數字\n多首歌曲以空格分開,如"1 2"回車\n輸入非數字退出選擇,進入搜索狀態\n全部下載請輸入100000:').strip()
if songid == '':
continue
try:
songid = [int(i) for i in songid.strip().split()]
# print(songid)
if songid[0] != 100000:
for song in songid:
# print(songlist[song-1]["FileHash"])
# print(songlist[song-1]["AlbumID"])
songname = songlist[song-1]["SingerName"].replace("","").replace("em",'').replace("/",'').strip()+"_"+songlist[song-1]["AlbumName"]+"_"+songlist[song-1]["SongName"].replace("","").replace("em",'').replace("/",'').strip()
try:
get_kugou_mp3_address_and_download(songlist[song-1]["FileHash"],songlist[song-1]["AlbumID"])
print(u"\n-------恭喜,當前歌曲--%s--下載完成---------\n" % songname)
except:
print("網絡錯誤")
print(u"退出請輸入'exit'或者'退出'")
else:
print("正在開始下載搜索到的所有歌曲,請耐心等待\n\n")
for songid in songlist:
print("-------正在下載歌曲--------%s----------" % songid[1])
time.sleep(2)
try:
get_mp3_address_and_download(songid[0])
print("-------恭喜,歌曲--------%s---下載完成-------\n" % songid[1])
except:
print("下載%s時錯誤發生" % songid[1])
except:
print("數字錯誤,重新搜索歌曲\n")
break
main()
if __name__=='__main__':
print("\n\n\n")
# search_music(u"可不可以")
# get_kugou_mp3_address_and_download("96E064A41AB84EBE4C03C6AAE3CB9334","9618875")
helpmessage()
os.system("start https://www.bobobk.com/234.html")
print("\n\n\n")
while True:
# main()
try:
main()
except:
print(u"2秒后關閉程序")
time.sleep(2)
sys.exit(0)
總結
本文是在python實現千千音樂mp3下載后,發現很多資源沒有,因此增加了這個酷狗音樂的下載程序,其中在使用requests獲取網頁的過程中遇到了障礙,不得不使用了selenium調用瀏覽器的方式獲取。但是結果總是好的,最好還是完美的實現了酷狗音樂的下載。
總結
以上是生活随笔為你收集整理的python自动下载酷狗音乐_python实现酷狗音乐mp3下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 由ContactsProvider的升级
- 下一篇: 先进过程工业控制与组态软件