【python爬虫实战案例】爬网易云音乐四大榜单!
马哥python说
2022年04月20日 11:05
收录于文集
共47篇

一、爬取目标

本次爬取的目标页面是,网易云音乐的四个排行榜:

https://music.163.com/#/discover/toplist

云音乐页面的4个榜单

本次分析,依然从网页接口入手,按F12进入开发者模式:

开发者模式

刷新一下页面,在右侧可以看到每首歌曲的数据,所以就对这个目标链接发送请求。

二、代码分解

首先,导入需要用到的库:

代码块
Python
自动换行
复制代码
import requests  # 发送请求
import pandas as pd  # 存入excel数据
from time import sleep  # 等待间隔,防止反爬
import random  # 随机等待
复制成功

然后,定义一个请求地址:

代码块
Python
自动换行
复制代码
# 请求地址
url = 'https://interface.music.163.com/weapi/v6/playlist/detail'
复制成功

然后,定义一个请求地址:

代码块
Python
自动换行
复制代码
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请求:

代码块
Python
自动换行
复制代码
# 发送POST请求
r = requests.post(url, headers=headers, params=v)
# 用json格式接收请求数据
json_data = r.json()
item_list = json_data['playlist']['tracks']
复制成功

后面,就是解析每个字段信息了,不再赘述。

最后,保存Excel数据:

代码块
Python
自动换行
复制代码
df = pd.DataFrame(
			{
				'排名': order_list,
				'标题': music_name,
				'时长': music_length,
				'歌手': music_singer,
			}
		)
# 保存excel数据
df.to_excel('网易云音乐_{}.xlsx'.format(k), index=False, )
复制成功

看下结果,以热歌榜前20名为例:

爬取结果

三、同步视频演示

视频演示爬取过程:

四、获取python源码

爱学习的小伙伴,本次案例的完整python源码及4个榜单Excel数据,已上传微信公众号“老男孩的平凡之路”,后台回复“爬云音乐”即可获取。


我是 @马哥python说​,关注我,持续分享python源码干货!