天天看點

Python3批量下載下傳網易雲音樂熱歌榜

Python3批量下載下傳網易雲音樂熱歌榜

可以批量下載下傳網易雲音樂熱歌榜的歌曲,可以自己設定數量,速度非常快。

https://music.163.com/#/discover/toplist?id=3778678

需先安裝以下兩個子產品

import requests
from bs4 import BeautifulSoup
           

首先,找到你要下載下傳的歌曲,用網頁版打開,複制連結中的歌曲ID,如:https://music.163.com/#/song?id=1428598981

這個連結ID就是 1428598981

然後将ID替換到連結http://music.163.com/song/media/outer/url?id=ID.mp3 中的ID位置即可獲得歌曲的外鍊:

http://music.163.com/song/media/outer/url?id=1428598981.mp3

附源碼:

來源,知乎Tsing的回答

歡迎關注+點贊+評論+收藏!

#-*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup

header = {    # 僞造浏覽器頭部,不然擷取不到網易雲音樂的頁面源代碼。
        'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
        'Referer':'http://93.174.95.27',
        }
link = "https://music.163.com/playlist?id=4880937603"
# 這是網易雲音樂歌單的連結,注意删除連結中的'#'
#(其實是嵌套在網頁裡面含有歌曲資料的頁面架構的真實連結)
r = requests.get(link, headers=header)
html = r.content
soup = BeautifulSoup(html, "html.parser")
songs = soup.find("ul", class_="f-hide").select("a", limit=10)
# 通過分析網頁源代碼發現排行榜中的歌曲資訊全部放在類名稱為 f-hide 的 ul 中
# 于是根據特殊的類名稱查找相應 ul,然後找到裡面的全部 a 标簽
# 限制數量為 10,即歌單的前 10 首歌

i = 1
for s in songs:
    song_id = s['href'][9:]
    song_name = s.text
    song_down_link = "http://music.163.com/song/media/outer/url?id=" + song_id + ".mp3"
    print("第 " + str(i) + " 首歌曲:" + song_down_link)
    print("正在下載下傳...")
    
    response = requests.get(song_down_link, headers=header).content
    f = open(song_name + ".mp3", 'wb')
    f.write(response)
    f.close()
    print("下載下傳完成!\n\r")
    i = i+1