使⽤Python代码下载⽹易⾳乐歌曲
刚刚写了⼀堆,最终放弃了,后来百度查到⼀个接⼝,
这个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': 'music.163/'}
self.main_url = 'music.163/'
# session实例化对象
self.session = requests.Session()
self.session.headers = self.headers
def get_resp(self, url):
"""发送url请求,返回响应内容"""
# 发送请求,获取响应
resp = (url) # 直接⽤session进⼊⽹页
# 返回响应内容
t
def get_songurls(self, playlist):
'''进⼊所选歌单页⾯,得出歌单⾥每⾸歌各⾃的ID 形式就是“song?id=64006"'''
url = self.main_url + 'playlist?id=%d' % playlist
# 获取内容
content = _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 = (url)
# 解析响应内容
sel = Selector()
# 获取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)
html播放音乐代码songname = re.sub(r"[?!@#$%^&*()/]", "", songname)
# os.sep相当于 “//”
path = dir_path + os.sep + songname + '.mp3' # ⽂件路径
# 获取内容
content = _resp(song_url)
# 保存到本地
with open(path, "wb") as f:
f.write(content)
print(songname, "下载完毕!")
def work(self, playlist):
# 输⼊歌单编号,得到歌单所有歌曲的url
songurls = _songurls(playlist)
# 指定歌曲存放位置
dir_path = r'./music'
if not ists(dir_path):
os.mkdir(dir_path)
# 遍历下载歌单中所有歌曲
for songurl in songurls:
# 根据歌曲url得出ID、歌名
song_id, songname = _songinfo(songurl)
# 拼接下载歌曲的url
song_url = '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呦
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论