admin管理员组文章数量:1583695
刚刚写了一堆,最终放弃了,后来百度查找到一个接口,
http://music.163/song/media/outer/url?id=这里填歌曲id.mp3
这个URL就可以下载了,现在再来做一次!根据歌单id下载歌曲
import os
import re
import requests
from scrapy.selector import Selector
class wangyiyun():
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'Referer': 'http://music.163/'}
self.main_url = 'http://music.163/'
# session实例化对象
self.session = requests.Session()
self.session.headers = self.headers
def get_resp(self, url):
"""发送url请求,返回响应内容"""
# 发送请求,获取响应
resp = self.session.get(url) # 直接用session进入网页
# 返回响应内容
return resp.content
def get_songurls(self, playlist):
'''进入所选歌单页面,得出歌单里每首歌各自的ID 形式就是“song?id=64006"'''
url = self.main_url + 'playlist?id=%d' % playlist
# 获取内容
content = self.get_resp(url)
# Scrapy选择器是Selector通过传递文本或TextResponse对象构造的类的实例。
# 根据输入类型自动选择最佳的解析规则(XML与HTML)
sel = Selector(text=content) # 用scrapy的Selector
songurls = sel.xpath('//ul[@class="f-hide"]/li/a/@href').extract()
return songurls # 所有歌曲组成的list
def get_songinfo(self, songurl):
'''根据songid进入每首歌信息的网址,得到歌曲的信息'''
url = self.main_url + songurl
# 发送请求,获取响应
resp = self.session.get(url)
# 解析响应内容
sel = Selector(text=resp.text)
# 获取song_id
song_id = url.split('=')[1]
# 获取song_name
song_name = sel.xpath("//em[@class='f-ff2']/text()").extract_first()
# 获取singer
singer = '&'.join(sel.xpath("//p[@class='des s-fc4']/span/a/text()").extract())
# 组装songname
songname = singer + '-' + song_name
# 返回
return str(song_id), songname
def download_song(self, song_url, songname, dir_path):
'''根据歌曲url,下载mp3文件'''
# 文件名中不能含有特殊字符
# songname = re.sub(r"[/]", ",", songname)
songname = re.sub(r"[?!@#$%^&*()/]", "", songname)
# os.sep相当于 “//”
path = dir_path + os.sep + songname + '.mp3' # 文件路径
# 获取内容
content = self.get_resp(song_url)
# 保存到本地
with open(path, "wb") as f:
f.write(content)
print(songname, "下载完毕!")
def work(self, playlist):
# 输入歌单编号,得到歌单所有歌曲的url
songurls = self.get_songurls(playlist)
# 指定歌曲存放位置
dir_path = r'./music'
if not os.path.exists(dir_path):
os.mkdir(dir_path)
# 遍历下载歌单中所有歌曲
for songurl in songurls:
# 根据歌曲url得出ID、歌名
song_id, songname = self.get_songinfo(songurl)
# 拼接下载歌曲的url
song_url = 'http://music.163/song/media/outer/url?id=%s.mp3' % song_id
# 下载歌曲
self.download_song(song_url, songname, dir_path)
if __name__ == '__main__':
d = wangyiyun()
d.work(863744119) # 歌单id
简单到爆。。。。
敲黑板。。。
还记得曾经用爬虫获得网易云所有歌单吗?其中就包括歌单url呦
网址送给你:https://blog.csdn/apollo_miracle/article/details/85015152
版权声明:本文标题:使用Python代码下载网易音乐歌曲 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727921520a1138246.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论