python下载网易云音乐中某个歌单中的全部音乐

以下面这个歌单为例:下载赵雷的所有音乐。其实我们只需获取这个歌单中所有音乐的id。

python下载网易云音乐中某个歌单中的全部音乐_第1张图片

 我们查找一下歌曲的id信息:

python下载网易云音乐中某个歌单中的全部音乐_第2张图片

这样就找到了歌曲的id信息:

python下载网易云音乐中某个歌单中的全部音乐_第3张图片 但是这样是拿不到的,我们要找的源码其实是在这:

python下载网易云音乐中某个歌单中的全部音乐_第4张图片

 

接下来要做的就是用程序获取这些id:

1.请求本歌单的网址https://music.163.com/playlist?id=98332770(注意:要将#号去掉)

python下载网易云音乐中某个歌单中的全部音乐_第5张图片

 这里才是我们要请求的网址:

import requests
import time
from bs4 import BeautifulSoup

headers = {
    'Host': 'music.163.com',
    'Referer': 'https://music.163.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
}

url="https://music.163.com/playlist?id=98332770"

response = requests.get(url=url, headers=headers)
html=response.content.decode(encoding="utf-8")
#print(html)
soup = BeautifulSoup(html, 'lxml')
results = soup.find('ul',{'class':'f-hide'})
results=results.find_all('a')
print(results)
for music in results:
    print(music.text, music['href'])

python下载网易云音乐中某个歌单中的全部音乐_第6张图片

到这里,已经拿到了歌曲名及歌曲的id。

接下来是下载:

网易云歌曲一般会有一个外链,专门用于下载音乐音频的,以赵雷的歌曲《成都》为例,《成都》的外链URL是:http://music.163.com/song/media/outer/url?id=436514312.mp3,其中436514312这个数字是《成都》这首歌曲的ID。也就是说只要我们将歌曲的ID传入到外链URL中,就可以找到该歌曲的下载地址。

完整代码:

import requests
import time
from bs4 import BeautifulSoup
import urllib.request

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0',
}

url="https://music.163.com/playlist?id=98332770"

response = requests.get(url=url, headers=headers)
html=response.content.decode(encoding="utf-8")
#print(html)
soup = BeautifulSoup(html, 'lxml')
results = soup.find('ul',{'class':'f-hide'})
results=results.find_all('a')
print(results)
for music in results:
    #print(music.text, music['href'])
    #下载歌曲
    music_url="http://music.163.com/song/media/outer/url?id={}.mp3".format(music['href'].split("=")[1])
    print(music_url)
    urllib.request.urlretrieve(music_url,music.text+'.mp3')

运行结果:

python下载网易云音乐中某个歌单中的全部音乐_第7张图片

 

 

改进版:直接输入歌单的URL即可!!

python下载网易云音乐中某个歌单中的全部音乐_第8张图片

完整代码:

 

from tkinter import *
import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve

 
def download():
    url = entry.get()
    new_url = url.replace('/#', '')
    header = {
        'Host': 'music.163.com',
        'Referer': 'https://music.163.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
    }
    res = requests.get(new_url, headers=header).text
    r = BeautifulSoup(res, "html.parser")
    music_dict = {}
    result = r.find('ul', {'class', 'f-hide'}).find_all('a')
    for music in result:
        #print(music)
        music_id = music.get('href').strip('/song?id=')
        print(music_id)
        music_name = music.text
        music_dict[music_id] = music_name
    for song_id in music_dict:
        song_url = "http://music.163.com/song/media/outer/url?id=%s" % song_id
        print(song_url)
        path = r" %s.mp3" % music_dict[song_id]
 
        # 添加数据
        text.insert(END, "正在下载:%s" % music_dict[song_id])
        text.see(END)
        text.update()
 
        urlretrieve(song_url, path)
 
 
root = Tk()
root.title("网易云音乐下载器")
root.geometry("550x400+550+230")
 
label = Label(root, text="歌单URL", font=('宋体', 15))
label.grid()
 
entry = Entry(root, font=('微软雅黑', 20))
entry.grid(row=0, column=1)
 
text = Listbox(root, font=("微软雅黑", 15), width=45, height=10)
text.grid(row=1, columnspan=2)
 
button = Button(root, text="开始下载", font=("微软雅黑", 15), command=download)
button.grid(row=2, column=0, sticky=W)
 
button1 = Button(root, text="退出", font=("微软雅黑", 15), command=root.quit)
button1.grid(row=2, column=1, sticky=E)
 
 
mainloop()

 

你可能感兴趣的:(python爬虫,python,网易云音乐,python,网易云音乐下载)