再也不怕深夜emo的時候沒會員了,無敵Python只需20行程式碼,輕鬆爬取網易雲排行榜熱門音樂!

圆圆学Python發表於2024-09-05

再也不怕深夜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)

大家快去試一下吧!!

相關文章