获取QQ音乐排行榜数据

本文讲述了作者尝试使用JavaScript爬取QQ音乐排行榜数据的过程,包括遇到的困难,如CORS政策、HTML数据不完整等,并最终通过在网络请求中发现隐藏的JSON数据源解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取QQ音乐排行榜数据

获取qq音乐排行榜的数据,比如内地榜.
在这里插入图片描述
首先看一下是否有API。Google发现QQ音乐官方是没有API的,不过有一些第三方的API,比如QQ 音乐API koa2实现。可惜没有我先要的数据的API。

然后我想可以写一个爬虫,看这个网页的结构是比较简单的,想着应该比较简单吧。一般写爬虫是用Python,用Request、BS4、Selenium我之前也用过。因为Python这门语言已经一两年没用了,我最近熟练度比较高的语言是JavaScript,所以打算用JavaScript来看看能否写一个爬虫(而且我一直觉得JS就是为Web而生,怎么能不用来写爬虫)。

JavaScript是可以写爬虫,但是用的人相当的少。查了一下,用来构建HTTP请求的,要么是直接用XMLHttpRequest,要么使用第三方库jQuiry或axios,两者都是对XMLHttpRequest进行了包装而变得易用。相比之下,使用axios更好。于是用了axios来发起HTTP响应。然后使用cheerio来解析请求回来的文档(也可以使用JQuery,cheerio其实是JQ的dom功能实现)。确实还挺简单的,比如下(具体怎么用看axios和cheerio的文档,或者一些别人写的博客即可):

const axios = require("axios");
const cheerio = require("cheerio")
axios.get("www.baidu.com").then(function (response) {
        var $ = cheerio.load(response.data);
        var ele = $('#root'); // 
以下是使用Python和Pycharm爬取QQ音乐排行榜的代码: ``` import requests import json # 设置请求头 headers = { 'Referer': 'https://y.qq.com/n/yqq/toplist/4.html', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } # 获取排行榜页面 response = requests.get('https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?tpl=3&page=detail&date=2021_30&topid=4&type=top&song_begin=0&song_num=30&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0', headers=headers) # 解析json数据 data = json.loads(response.text) # 遍历歌曲列表 for music in data['songlist']: # 获取歌曲mid song_mid = music['data']['mid'] # 构造获取vkey的url url = 'https://u.y.qq.com/cgi-bin/musicu.fcg?callback=getplaysongvkey6354954596402418&g_tk=5381&jsonpCallback=getplaysongvkey6354954596402418&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&data=%7B%22req_0%22%3A%7B%22module%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%22583432000%22%2C%22songmid%22%3A%5B%22{}%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%220%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%7D'.format(song_mid) # 发送获取vkey的请求 response = requests.get(url, headers=headers) # 解析json数据 data = json.loads(response.text.strip('getplaysongvkey6354954596402418(').strip(')')) # 获取vkey vkey = data['req_0']['data']['midurlinfo'][0]['purl'] # 输出歌曲名和播放链接 print(music['data']['songname'], 'https://isure.stream.qqmusic.qq.com/{}?vkey={}&guid=538432000&uin=0&fromtag=66'.format(vkey, data['req_0']['data']['sip'][0])) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值