再也不怕深夜emo的時候沒會員了,無敵Python只需20行程式碼,輕鬆爬取網易雲排行榜熱門音樂! 讓我們直接開始本次操作吧!
import random import time import execjs import requests import re """傳送請求: 模擬瀏覽器對於url地址傳送請求""" # 模擬瀏覽器 headers = { 'User-Agent':'*******” (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' } # 請求網址: 熱歌榜連結 link = 'https://********/discover/toplist?id=3778678' # 獲取資料 html = requests.get(url=link, headers=headers).text # 使用正則提取歌曲ID 歌名 info = re.findall('<a href="/song\?id=(\d+)">(.*?)</a>', html) # for迴圈遍歷 for music_id, title in info: # time.sleep(random.randint(1,2)) # 替換特殊字元 new_title = re.sub(r'[\\/:*?"<>|]', '', title) print(music_id, title) # 請求網址 url = 'https://com/weapi/song/enhance/player/url/v1?csrf_token=' # 讀取js程式碼 js_file = open('網易.js', encoding='utf-8').read() # 編譯js程式碼 js_code = execjs.compile(js_file) # 引數 a = { "ids": f"[{music_id}]", "level": "standard", "encodeType": "aac", "csrf_token": "" } # 完整原始碼加v Python1018 備註{ 圓圓 } 獲取 不備註不透過驗證哦 # 呼叫js程式碼函式 resp = js_code.call('get_data', a) print(resp) # 請求引數 (需要透過呼叫js程式碼獲取) data = { 'params':resp['encText'], 'encSecKey':resp['encSecKey'], } # 傳送請求 response = requests.post(url=url, data=data, headers=headers) """獲取響應json資料""" json_data = response.json() """解析資料: 提取歌曲連結""" music_url = json_data['data'][0]['url'] """儲存資料: 獲取歌曲內容, 進行資料儲存""" # 獲取歌曲內容 music_content = requests.get(url=music_url, headers=headers).content # 儲存資料 with open('music\\' + title + '.mp3', mode='wb') as f: # 寫入資料 f.write(music_content) print(music_url)
大家快去試一下吧!!