网易云音乐的所有歌手列表

目录

1.首页访问

2.解析各类歌手url

3.访问刚刚获取到的五大分类里面的链接,进入到每类歌手的界面

4.请求每个字母的链接,获取到对应的歌手列表,获取歌手信息



网易云音乐的网址:https://music.163.com/

1.首页访问

我们的需求是要爬取网易云音乐的所有歌手,点击歌手,

得到接口:https://music.163.com/discover/artist

这里有个问题需要注意一下,我们注意到当我们在网页上点击歌手之后,网址是https://music.163.com/#/discover/artist

但是我们写好代码请求这个页面的时候是获取不到的,所以我们请求的接口应该把中间的那个#去掉,写成:https://music.163.com/discover/artist

# 首页访问
url = 'https://music.163.com/discover/artist'
headers = {
    'user-agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"}
response = requests.get(url=url, headers=headers)
content = response.content.decode('utf-8')
with open('wangyiyun.html', 'w', encoding='utf-8') as fp:
    fp.write(content)

2.解析各类歌手url

首先我们看到歌手先有五种分类:华语,欧美,日本,韩国,其他

在前端页面都被写在class="blk"的div标签里面

先把这几类下面的每种链接都获取出来

我们可以看到链接到放到每一个div>ul>li>a:href

但是a标签href里面的标签不完整,需要拼接一下

链接格式应该是:‘https://music.163.com’+‘/discover/artist/cat?id=1001’

代码实现如下所示:

# 解析各类歌手url
tree = etree.HTML(content)
group_list = tree.xpath('//div[@class="blk"]')
print(len(group_list))
for group in group_list:
    # 歌手分类
    group_name = group.xpath('.//a/text()')
    # print(group_name)
    # 链接
    group_link = group.xpath('.//a/@href')
    # print(group_link)
    for i, j in zip(group_name, group_link):
        # 歌手地址
        link = 'https://music.163.com' + j

3.访问刚刚获取到的五大分类里面的链接,进入到每类歌手的界面

在这里我们以华语男歌手为例,可以看到页面上展示出来的歌手肯定不全,上面有一栏写着热门,A.B.C.D........

我们把A.B.C.D......这些都遍历出来,就可以完整的爬取到歌手了

打开F12分析一下界面

(1)可以看到A.B.C.D.....对应的是class="n-ltlst f-cb"的ul标签下面的li元素

但是我们不需要获取热门里面的内容,所以要把第一个li去掉

这里有两种方法:pop(0) ; xpath的位谓语position()>1进行限制

(2)获取每个字母下面的链接:

很容易看见是在上面找的li元素的a标签的href属性里面

链接地址同样也需要拼接

代码实现如下:

singer_content = requests.get(link).content.decode('utf-8')
        tree = etree.HTML(singer_content)
        singer_url = tree.xpath('//ul[@class="n-ltlst f-cb"]/li[position()>1]/a/@href')
        print(singer_url)
        for url in singer_url:
            full_url = 'https://music.163.com' + url
            print(full_url)
            

4.请求每个字母的链接,获取到对应的歌手列表,获取歌手信息

每一个歌手的信息都写在class="m-sgerlist"的div标签的ul>li标签

歌手的名字都在div>ul>li>p>a>text()

代码实现:

singer_info = requests.get(full_url).content.decode('utf-8')
tree = etree.HTML(singer_info)
li_list = tree.xpath('//div[@class="m-sgerlist"]/ul/li/a/text()')
for li in li_list:
    print(li)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值