QQ音乐API爬取全过程

本文详细介绍了如何爬取QQ音乐API的过程,包括前端跨域限制的解决、接口分析、'-'和Sign的获取方法,以及利用vue和node.js实现数据抓取的代码示例。
摘要由CSDN通过智能技术生成

QQ音乐API爬取全过程

1. 前序:

在以前的QQ音乐的API爬取中,是非常容易的,采用的是jsonp的请求方式,但现在QQ音乐请求已经全部改成XHR的ajax的方式发送请求,所以要爬取QQ音乐的数据就需要破解QQ音乐发送请求的参数。

2. 对于前端:

在前端发送XHR请求的话会有请求端跨域限制,所以对于前端不能直接发送XHR请求到QQ音乐后端,而是要自己另外搭一个服务器,用我们的服务器去向QQ音乐发送请求。

3. QQ音乐接口分析:

以获取QQ音乐的焦点图为例。
在这里插入图片描述
这是我们要爬取的图片。在浏览器中按F12,然后查看network的xhr请求,可以看到。
QQ音乐是从这里拿到的数据,所以对于这个接口分析。
Request Header:
在这里插入图片描述
在这个请求的header中,是有服务端referer和origin限制的,所以为了骗过QQ音乐的服务器,我们在我们后台发的请求的header中也要把origin和referer设置成和QQ音乐一样。
Query String Parameters:
在这里插入图片描述
可以看到QQ音乐的params中是有’-'和sign签名的,我们要拿到这个数据,首先就是要这两个的加密的获取方式,而在其他中,实际上都是一些静态数据,直接复制上去就好了。

4. ‘-’和Sign的获取

要知道怎么获取’-‘或者sign就必须知道这两个加密是怎么产生的,所以在浏览器的控制台中按ctrl+shift+f。
首先我们搜索recom,在’-'中recom是一个不变的量。
在ctrl+shift+f搜索到的文件中,先把它格式化,然后按ctrl+f就可以在文件中搜索我们要的数据。
在这里插入图片描述
在这里插入图片描述
在这个请求中我们可以看到recom的获取是通过。

'recom' + (Math.random() + '').replace('0.', '')

这么一个方法。所以我们这个加在请求中就可以了。
然后是sign的获取,sign的获取会些许麻烦。
在这里插入图片描述
用相同的方法,我们可以看到sign是从一个getSecuritySign获取的,然后这个方法使用通过一个js文件获取,链接挂在下面。

'地址y.qq.com/component/m/qmfe-security-sign/index.umd.js?max_age=2592000'

先把这个js格式化之后,可以大概的看一下这个js文件。
在这里插入图片描述
可以看到,封装了一个__sign_hash_20200305的function。
所以我们把这个js复制下来,放到自己的文件当中,然后自己写一个方法去获取这个sign的值,然后把这个方法导出去。

export default function getSecuritySign(data) {
   
  let str = 'abcdefghijklmnopqrstuvwxyz0123456789'
  let count = Math.floor(Math.random() * 7 + 10)
  let sign = 'zza'
  for (let i = 0; i < count; i++) {
   
    sign += str[Math.floor(Math.random() * 36)]
  }
  sign += window.
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值