日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytho_抓取下载音乐歌曲

發(fā)布時(shí)間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytho_抓取下载音乐歌曲 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

抓取酷我音樂的流程

  • 打開Chrome瀏覽器找到酷我音樂的首頁

  • 先按F12調(diào)出chrome瀏覽器的調(diào)試工具

  • 搜索歌曲,并且查看NextWord選項(xiàng)的抓包情況

  • 通過尋找發(fā)現(xiàn)發(fā)送響應(yīng)的url地址

  • 打開文件并觀察里面的數(shù)據(jù) 發(fā)現(xiàn)是一個(gè)帶有json的數(shù)據(jù)網(wǎng)頁,嘗試打開這個(gè)json頁面卻發(fā)現(xiàn)請(qǐng)求錯(cuò)誤404

  • 發(fā)現(xiàn)不讓我們?cè)L問有帶json界面的數(shù)據(jù), 經(jīng)過問候度娘在不知名的網(wǎng)頁中得知:有時(shí)候用戶不能訪問但是程序可以訪問, 然后試了一下使用python成功訪問:

  • 獲取請(qǐng)求后繼續(xù)觀察url地址,查找不同的歌曲,并且查看url地址中的參數(shù)是否發(fā)生變化

  • 觀察后得知 里面有2處地址發(fā)生變化,發(fā)生變化的位置已經(jīng)用{}代替方便后續(xù)的參數(shù)傳遞

  • 觀察從剛剛獲取請(qǐng)求的json數(shù)據(jù)后發(fā)現(xiàn)需要傳遞的參數(shù)都在json數(shù)據(jù)里面。先把請(qǐng)求好的str類型的html字符串使用json.loads()方法轉(zhuǎn)換為python能夠識(shí)別的內(nèi)容 接下來就是按照字典提取數(shù)據(jù)的方法提取所需要的數(shù)據(jù),
    10.程序代碼如下:

  • import requests import json import osclass My_Music():def __init__(self):print("*"*25+"音樂抓取器"+"*"*25)key_name = input('*請(qǐng)輸入你要查找的歌曲名稱*:')num = input('*請(qǐng)輸入你要查看歌曲列表第幾頁*:')self.headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}self.headers2 = {"Accept": "application/json, text/plain, */*","Accept-Encoding": "gzip, deflate","Accept-Language": "zh-CN,zh;q=0.9","Connection": "keep-alive","Cookie": "_ga=GA1.2.1217877481.1602902461; h5Uuid=d48c2935f62740f1a5fb2a98c8a5c8-77; _gid=GA1.2.1687724501.1603190279; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602902462,1602923878,1603190279; uname3=%5EO%5E; t3kwid=225768453; userid=225768453; websid=1015091557; pic3=\"http://q.qlogo.cn/qqapp/100243533/90AF896B7270476F63C06DE71F6BFCA4/100\"; t3=qq; _gat=1; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1603190370; kw_token=PLSZIEEDJSK","csrf": "PLSZIEEDJSK","Host": "www.kuwo.cn","Referer": "http://www.kuwo.cn/search/list?key=%E6%B8%B8%E5%B1%B1%E6%81%8B","User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",}self.headers1 = {"Accept": "*/*","Accept-Encoding": "identity;q=1, *;q=0","Accept-Language": "zh-CN,zh;q=0.9","Connection": "keep-alive","Cookie": "_ga=GA1.2.1217877481.1602902461; h5Uuid=d48c2935f62740f1a5fb2a98c8a5c8-77; _gid=GA1.2.1687724501.1603190279; uname3=%5EO%5E; t3kwid=225768453; userid=225768453; websid=1015091557; pic3=\"http://q.qlogo.cn/qqapp/100243533/90AF896B7270476F63C06DE71F6BFCA4/100\"; t3=qq; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602902462,1602923878,1603190279,1603192339; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1603192422","Host": "ey-sycdn.kuwo.cn","If-None-Match": "\"5f3faedb-350ce7\"","Range": "bytes=3145728-3476710","Referer": "https://ey-sycdn.kuwo.cn/15a6818d99191a29bc2ced51da173052/5f8ec8bc/resource/n3/65/71/2640215188.mp3","Sec-Fetch-Dest": "video","Sec-Fetch-Mode": "no-cors","Sec-Fetch-Site": "\"same-origin\"","User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",}#self.url1 = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1603196093062&httpsStatus=1&reqId=dbd3f971-12cd-11eb-984f-451e90d80fbc"# apiself.url2 = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=30&httpsStatus=1&reqId=da11ad51-d211-11ea-b197-8bff3b9f83d2e'.format(key_name, num)# 保存歌曲的數(shù)量self.music_list = []# 放置所有歌手人名self.all_singers = []# 放置歌曲名字self.names = []# 放置所有rid,rid是網(wǎng)頁所需參數(shù)self.all_rid = []def get_response(self, url, headers, code=True):response = requests.get(url=url, headers=headers)if code == True:return json.loads(response.content.decode())elif code == False:response = requests.get(url=url, headers=headers)return response.contentdef json_html(self, jos_html, code=True):if code == True:with open("josn文件.json", "w") as f:f.write(json.dumps(jos_html, ensure_ascii=False, indent=4))else:with open("歌曲.mp3", "wb") as f:f.write(jos_html)def music_lists(self, music_list):a = 0for music in music_list:#保存歌曲的數(shù)量self.music_list.append(music)#放置所有歌手人名self.all_singers.append(music["artist"])a += 1# 放置歌曲名字self.names.append(str(a)+" "+music["name"])# 放置所有rid,rid是網(wǎng)頁所需參數(shù)self.all_rid.append(music["musicrid"].split("_")[-1])return self.music_list, self.all_singers, self.names, self.all_riddef get_song_url(self, name, singers, all_rid):infs = dict(zip(name, singers))infs = json.dumps(infs, ensure_ascii=False, indent=0, separators=(',', ':'))infs = infs.replace('"', ' ')infs = infs.replace(':', '——————')print(infs.split("{")[-1].split("}")[0].replace(",", ""))order = int(input("*請(qǐng)輸入歌曲前的序號(hào)*:"))order -= 1musicrid = all_rid[order]url = self.url1.format(musicrid)music_url = self.get_response(url, self.headers2)return music_url, orderdef music_song(self, song ,file_names, singers):self.file()name = str(file_names)+"---"+str(singers)file_name = "歌曲庫//"+name.split(" ")[-1]+".mp3"with open(file_name, "wb") as f:f.write(song)print(file_name.split("//")[-1],"下載保存成功!")def file(self):"""判斷當(dāng)前文件是否存在"""path = "歌曲庫"if not os.path.exists(path):os.mkdir(path)print(path.split("/")[-1], ":創(chuàng)建成功")def run(self):music_json = self.get_response(self.url2, self.headers2)# 保存json文件 方便查看self.json_html(music_json)music_list = music_json["data"]["list"]print("當(dāng)前頁面有", len(music_list), "支歌曲:")content, singers, name, all_rid= self.music_lists(music_list)music_url, orid = self.get_song_url(name, singers, all_rid)song = music_url["url"]singer = self.get_response(song, self.headers, code=False)self.music_song(singer, name[int(orid)], singers[int(orid)])if __name__ == '__main__':while True:try:music = My_Music()music.run()except ValueError:print("歌曲下載錯(cuò)誤,歌曲序號(hào)請(qǐng)輸入整數(shù)!")except requests.exceptions.ConnectionError:print("網(wǎng)絡(luò)連接錯(cuò)誤,請(qǐng)檢查網(wǎng)絡(luò)連接!")print("程序退出")breakexcept Exception as f:print("網(wǎng)絡(luò)連接超時(shí),請(qǐng)重啟檢測(cè)網(wǎng)絡(luò)通暢性!")

    總結(jié)

    以上是生活随笔為你收集整理的pytho_抓取下载音乐歌曲的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。