相关文章推荐
兴奋的烤红薯  ·  sqlite 日期型 ...·  1 年前    · 
果断的毛豆  ·  Oracle 12c ...·  1 年前    · 

【python爬虫实战案例】爬网易云音乐四大榜单!

一、爬取目标

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

网易云音乐榜单

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

开发者模式界面

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

二、代码分解

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

import requests  # 发送请求
import pandas as pd  # 存入excel数据
from time import sleep  # 等待间隔,防止反爬
import random  # 随机等待

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

# 请求地址
url = 'https://interface.music.163.com/weapi/v6/playlist/detail'

定义一个请求头request header:

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,