本次爬取的目标页面是,网易云音乐的四个排行榜:
https://music.163.com/#/discover/toplist

云音乐页面的4个榜单
本次分析,依然从网页接口入手,按F12进入开发者模式:

开发者模式
刷新一下页面,在右侧可以看到每首歌曲的数据,所以就对这个目标链接发送请求。
首先,导入需要用到的库:
import requests # 发送请求
import pandas as pd # 存入excel数据
from time import sleep # 等待间隔,防止反爬
import random # 随机等待 然后,定义一个请求地址:
# 请求地址
url = 'https://interface.music.163.com/weapi/v6/playlist/detail' 然后,定义一个请求地址:
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36',
'accept': 'application/json, text/javascript',
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'accept-encoding': 'gzip, deflate, br',
'content-type': 'application/x-www-form-urlencoded',
'origin': 'https://y.music.163.com/',
'referer': 'https://y.music.163.com/',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'cookie': r"换成自己的cookie哦"
} 然后,还需要定义请求参数,params,这也是这个爬虫的关键,经过分析,4个榜单的参数都不一样,以飙升榜为例:

请求参数
下面是发送POST请求:
# 发送POST请求
r = requests.post(url, headers=headers, params=v)
# 用json格式接收请求数据
json_data = r.json()
item_list = json_data['playlist']['tracks']
后面,就是解析每个字段信息了,不再赘述。
最后,保存Excel数据:
df = pd.DataFrame(
{
'排名': order_list,
'标题': music_name,
'时长': music_length,
'歌手': music_singer,
}
)
# 保存excel数据
df.to_excel('网易云音乐_{}.xlsx'.format(k), index=False, ) 看下结果,以热歌榜前20名为例:

爬取结果
视频演示爬取过程:

爱学习的小伙伴,本次案例的完整python源码及4个榜单Excel数据,已上传微信公众号“老男孩的平凡之路”,后台回复“爬云音乐”即可获取。
我是 @马哥python说,关注我,持续分享python源码干货!