帮我写一个可以输入网易云歌手名字如何下载歌曲的代码
时间: 2024-06-09 12:11:57 浏览: 181
Python-根据歌曲名字下载网易云音乐歌词
好的,我可以为你提供一个Python代码示例,使用它可以下载网易云音乐中指定歌手的所有歌曲。
首先,你需要安装两个Python库:requests和BeautifulSoup4。你可以使用以下命令来安装它们:
```
pip install requests
pip install beautifulsoup4
```
然后,你可以使用以下代码来下载指定歌手的所有歌曲:
```python
import requests
from bs4 import BeautifulSoup
# 输入歌手名字
singer_name = input("请输入歌手名字:")
# 构造请求头部
headers = {
'Referer': 'http://music.163.com',
'Host': 'music.163.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 搜索歌手
search_url = 'http://music.163.com/discover/artist/cat?id=1001&initial=0'
res = requests.get(search_url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
artists = soup.select('ul.m-cvrlst.f-cb li')
for artist in artists:
if artist.select('a')[0].text == singer_name:
singer_id = artist.select('a')[0]['href'].split('=')[-1]
break
# 获取歌手的所有专辑
albums_url = f'http://music.163.com/artist/album?id={singer_id}&limit=1000'
res = requests.get(albums_url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
albums = soup.select('ul.m-disc li div.u-cover.u-cover-alb3')
# 获取每个专辑的所有歌曲
for album in albums:
album_id = album.select('a')[0]['href'].split('=')[-1]
album_name = album.select('a')[0]['title']
album_url = f'http://music.163.com/album?id={album_id}'
res = requests.get(album_url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
songs = soup.select('ul.f-hide li')
for song in songs:
song_id = song.select('a')[0]['href'].split('=')[-1]
song_name = song.select('a')[0].text
song_url = f'http://music.163.com/song/media/outer/url?id={song_id}.mp3'
print(f'正在下载歌曲:{song_name} - {album_name}')
response = requests.get(song_url, headers=headers)
with open(f'{song_name}.mp3', 'wb') as f:
f.write(response.content)
print('所有歌曲已下载完成!')
```
这个代码会要求你输入歌手的名字,然后会自动搜索该歌手,并下载他/她的所有歌曲。请注意,这个代码依赖于网易云音乐的网站结构,如果网站结构发生了变化,可能会导致代码无法正常工作。
阅读全文