网易云音乐 vip 免费下载方法(python 爬虫)
最编程
2024-04-18 20:49:50
...
import os
import re
import json
import requests
from lxml import etree
def download_songs(url=None):
if url is None:
url = 'https://music.163.com/#/playlist?id=2384642500'
url = url.replace('/#', '').replace('https', 'http') # 对字符串进行去空格和转协议处理
# 网易云音乐外链url接口:http://music.163.com/song/media/outer/url?id=xxxx
out_link = 'http://music.163.com/song/media/outer/url?id='
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer': 'https://music.163.com/',
'Host': 'music.163.com'
}
# 请求页面的源码
res = requests.get(url=url, headers=headers).text
tree = etree.HTML(res)
# 音乐列表
song_list = tree.xpath('//ul[@class="f-hide"]/li/a')
# 如果是歌手页面
artist_name_tree = tree.xpath('//h2[@id="artist-name"]/text()')
artist_name = str(artist_name_tree[0]) if artist_name_tree else None
# 如果是歌单页面:
#song_list_tree = tree.xpath('//*[@id="m-playlist"]/div[1]/div/div/div[2]/div[2]/div/div[1]/table/tbody')
song_list_name_tree = tree.xpath('//h2[contains(@class,"f-ff2")]/text()')
song_list_name = str(song_list_name_tree[0]) if song_list_name_tree else None
# 设置音乐下载的文件夹为歌手名字或歌单名
folder = './' + artist_name if artist_name else './' + song_list_name
if not os.path.exists(folder):
os.mkdir(folder)
for i, s in enumerate(song_list):
href = str(s.xpath('./@href')[0])
song_id = href.split('=')[-1]
src = out_link + song_id # 拼接获取音乐真实的src资源值
title = str(s.xpath('./text()')[0]) # 音乐的名字
filename = title + '.mp3'
filepath = folder + '/' + filename
print('开始下载第{}首音乐:{}\n'.format(i + 1, filename))
try: # 下载音乐
#下载歌词
#download_lyric(title, song_id)
data = requests.get(src).content # 音乐的二进制数据
with open(filepath, 'wb') as f:
f.write(data)
except Exception as e:
print(e)
print('{}首全部歌曲已经下载完毕!'.format(len(song_list)))
def download_lyric(song_name, song_id):
url = 'http://music.163.com/api/song/lyric?id={}&lv=-1&kv=-1&tv=-1'.format(song_id)
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
'Referer': 'https://music.163.com/',
'Host': 'music.163.com'
# 'Origin': 'https://music.163.com'
}
# 请求页面的源码
res = requests.get(url=url, headers=headers).text
json_obj = json.loads(res)
lyric = json_obj['lrc']['lyric']
reg = re.compile(r'\[.*\]')
lrc_text = re.sub(reg, '', lyric).strip()
print(song_name, lrc_text)
a = 'https://music.163.com/#/playlist?id=7608893879'
if __name__ == '__main__':
# #music_list = 'https://music.163.com/#/playlist?id=2384642500' #歌曲清单
music_list = 'https://music.163.com/#/playlist?id=7743939886' #1
# music_list = 'https://music.163.com/#/playlist?id=7743887033' #2
# music_list = 'https://music.163.com/#/playlist?id=7744228361' #3
# music_list = 'https://music.163.com/#/playlist?id=7744194170' #4
# music_list = 'https://music.163.com/#/playlist?id=7744204867' #5
# music_list = 'https://music.163.com/#/playlist?id=7743971782' #6
# music_list = 'https://music.163.com/#/playlist?id=7744098326' #7
# music_list = 'https://music.163.com/#/playlist?id=7743939892' #8
# music_list = 'https://music.163.com/#/playlist?id=7743891024' #9
# music_list = 'https://music.163.com/#/playlist?id=7744240226' #10 #我的网易云那啥
# music_list = 'https://music.163.com/#/search/m/?order=hot&cat=全部&limit=435&offset=435&s=梁静茹' #搜索列表
download_songs(music_list)
上一篇: 用 Python 位图播放动态歌词
下一篇: JavaScript 解析 lrc 歌词
推荐阅读
-
Python 爬虫项目实战案例--批量下载网易云音乐列表保存到本地
-
分享网易云歌单音乐批量下载神器,支持高品质,免费免安装
-
网易云音乐通过 Docker 部署实现无灰度无版权 VIP 音乐播放下载
-
网易云音乐 vip 免费下载方法(python 爬虫)
-
全部在 Netflix 上播放!全部!休闲爬虫!(基于网易云音乐评论的 Python 爬虫和用户推荐系统)(I)
-
如何用Python爬虫在网易云音乐上下载歌曲?
-
Python爬虫实现电影资源下载方法-本人python运行环境: IDE丨pycharm2.3 版本丨Python3.6 系统丨Windows 10 爬虫目的与思路:实现目的与思路: 目的: 实现对电影目标url的解析与下载,由于第三方vip解析,只提供在线观看,隐藏想实现对目标视频的下载。 思路: 1.在百度搜索全名解析得到解析网站:jx.618g.com?/url=[电影播放地址]。 2.首先拿到想要看的电影url,通过第三方vip视频解析网站进行解析。 3.通过抓包,模拟浏览器发送正常请求。 4.通过拿到缓存ts文件,下载视频ts文件。 5.最后通过转换为mp4文件,即可实现正常播放。主要代码:
-
详解Python爬虫网易云音乐教程:附源码,完整解读