首页 > 编程语言 >网易云vip音乐免费下载方法(python爬虫)

网易云vip音乐免费下载方法(python爬虫)

时间:2022-11-13 16:11:27浏览次数:36  
标签:https song python list 爬虫 vip music.163 com id

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)

如有侵权请联系删除(忘记了是在哪里抄的了)

 

pip install lxml

标签:https,song,python,list,爬虫,vip,music.163,com,id
From: https://www.cnblogs.com/wawawa888/p/16886148.html

相关文章

  • 爬虫-aiohttp
     #-*-coding:utf-8-*-importrequestsimportasyncioimporttimeimportaiohttp'''-aiohttp-是一个支持异步的网络请求模块-pipinstallaiohttp......
  • Python3-异步协程
     importasyncioimporttimeasyncdefget_request(url):print('正在请求的url:',url)awaitasyncio.sleep(2)#支持异步模块代码print('请求结束:'......
  • python2 切换到 python3
    python2切换到python3Part.1:py3中不支持的py2用法1.1PrintIsAFunctionpy2中print为保留的关键字,在py3中,改为普通的函数。Old:print"Theansweris......
  • python的while循环
    语法while条件:#条件成立,循环执行的代码一#条件成立,循环执行的代码二#条件成立,循环执行的代码三#条件成立,循环执行的代码四#.......如......
  • python的for循环
    语法foriinxxx#循环体else:#循环正常结束执行执行else中的代码#循环通过break强制结束则不会执行else用法1、遍历列表li=[34,66,33,7......
  • Python绘制跳动的红心
    前言最近有一个电视剧,讲程序员的故事,巴拉巴拉......,被我关注的一个up主,吐槽了。总之电视剧中有一个跳动的心,up主复现了,那我也跟着学习了下,也弄了个动图~.爱心为画这样......
  • python装饰器
    函数式编程复习:defmap_test(func,array):array_new=[]foriinarray:array_new.append(func(i))returnarray_newprintmap_test(lambdax:x**2,rang......
  • python8 集合
    集合介绍Python内置的数据结构和列表、字典一样都属于可变类型的序列集合是没有Value的字典,【即只存在Key】类型:set创建直接{}创建,用,号分隔内置函数set......
  • 力扣35(java&python)-搜索插入位置(简单)
    题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法......
  • gyp ERR! stack Error: Can't find Python executable "python", you can set the PYT
    方式一:安装python解决(正确配置系统环境变量),python(v2.7recommended,v3.x.xisnotsupported)-推荐下载:http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi......