python按需从网易云下载你喜欢的歌手的所有歌曲

按需从网易云下载你喜欢的歌手的所有歌曲

网易云这个好制作时因为他有一个外链url,先打开歌手页,直接就获取歌手在网页的id即可,可是源代码代码找不到那么他放在那了,于是我打开source查看了在这里面你要把请求url中的#去掉就可以得到带歌手id的网页,然后重点来了怎么获取所有的歌手页。这里不能一下子得到你想要的歌手,要按需要。仔细看歌手页面url变化,发现有两个变量一个是男歌手,女歌手,乐队,还有对应不同国家的,第二个参数是歌手的首字母大小写。然后就能获得你想要的歌手的大体,然后会返回一个歌手列表,再从这个列表里面匹配你喜欢的歌手,就能获取歌手的所在的网页,再跟我上面说的那样,得到这个歌手页的所有的,歌手的id,然后外链url加上id再通过r.content转化为二进制,进行保存。

import jsonpath
import json
from lxml import etree
import requests
import json
import jsonpath
import os
def getHTML(url):
    header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"}
    response=requests.get(url,headers=header)
    response.encoding='utf-8'
    html=response.text
    tree=etree.HTML(html)
    sing_id= tree.xpath('//ul[@class="f-hide"]/li/a/@href')
    song_name=tree.xpath('//ul[@class="f-hide"]/li/a/text()')
    # print(song_name)
    for index,i in enumerate(sing_id):
        a=i.split('?')[1]
        b=song_name[index]
        Outer_chain_url='http://music.163.com/song/media/outer/url?%s'%a
        root='E:/python/'
        path = '%s.mp3' % b
        if not os.path.exists(root):
            os.mkdir(root)
        with open (root+path,'wb') as f:
            header = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
            }
            r = requests.get(Outer_chain_url, headers=header)
            f.write(r.content)
            print(b)
def get_Sing_List(urla):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"}
    response1 = requests.get(urla, headers=header)
    response1.encoding = 'utf-8'
    html1 = response1.text
    tree = etree.HTML(html1)
    singer_id = tree.xpath('//a[@class="nm nm-icn f-thide s-fc0"]/@href')
    sing_name = tree.xpath('//a[@class="nm nm-icn f-thide s-fc0"]/text()')
    dicta = dict(zip(sing_name, singer_id))
    input_name=input('现在输入歌手名字')
    if input_name in dicta:
        print('现在开始下载歌曲')
        url = 'https://music.163.com/artist?id=%s' % dicta[input_name].split('=')[1]
        getHTML(url)
    else:
        print('你搜索的歌手不存在请重新输入')
        acquire_sing()
def acquire_sing():
    a = [1001,1002,1003,2001,2002,2003,6001,6002,6003,7001,7002,7003]
    words = {"A": "1", "B": "2", "C": "3", "D": "4", "E": "5", "F": "70", "G": "71", "H": "72", "I": "73",
             "J": "74", "K": "75", "L": "76", "M": "77", "N": "78", "O": "79", "P": "80", "Q": "81", "R": "82",
             "S": "83", "T": "84", "U": "85", "V": "86", "W": "87", "X": "88", "Y": "89", "Z": "90"}
    name = input( '中国(男歌手(0),女歌手(1),组合/乐队(2))\n'
                  '欧美(男歌手(3),女歌手(4),组合/乐队(5))\n'
                  '日本(男歌手(6),女歌手(7),组合/乐队(8))\n'
                  '韩国(男歌手(9),女歌手(10),组合/乐队(11))\n'
                  )
    word = input('请输入歌手首字母(注意是大写)')
    url = 'https://music.163.com/discover/artist/cat?id=%s&initial=%s' % (a[int(name)], words[word])
    print(url)
    get_Sing_List(url)
acquire_sing()

这是我的github地址,查看源码看我的githubhttps://github.com/jinPengCoding/-NetEaseCloudMusicDownload

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值