QQ音乐关键字搜索并生成下载url

QQ音乐关键字搜索并生成下载url

1. 获取搜索的歌单信息

​ 通过在QQ音乐进行关键字搜索,并通过F12检测,发现网页给网站https://c.y.qq.com/soso/fcgi-bin/client_search_cp? 发送了一条get请求,便可以得到其关键词搜索的json信息,通过简化可以得到以下关键词搜索的网址:https://c.y.qq.com/soso/fcgi-bin/client_search_cp?new_json=1&remoteplace=txt.yqq.song&t=0&aggr=1&cr=1&w={}&format=json&platform=yqq.json

​ 通过检查其preview我们可以发现,其中包含了我们所需要搜索歌曲的信息,如下所示:

在这里插入图片描述

​ 通过修改w所对应的值便可以得到我们所需要的json数据。

2. 获取下载外链

2.1 观察网页数据传输

​ 类似于获取歌单信息,打开一首歌并播放,按传输数据的大小排序,我们可以发现这样一条大小为3M多的get请求,毫无疑问,这便是我们所收听的歌曲。下载的url由guid、vkey、uin、fromtag组成。

在这里插入图片描述

​ 将Network切换到XHR,按经过一番查看,会看到这个文件,这样我们便可以直接得到下载所需的guid、vkey、uin、fromtag参数。

在这里插入图片描述

​ 通过检查其headers,可以获得其发送的get请求网址:

在这里插入图片描述

​ 为了方便观察,我们对其进行解码:

在这里插入图片描述

​ 由于uin涉及测试的用户信息,在这对其进行打码处理,最后解码出来的url经过可以表示为’https://u.y.qq.com/cgi-bin/musicu.fcg?data={“req_0”:{“module”:“vkey.GetVkeyServer”,“method”:“CgiGetVkey”,“param”:{“guid”:“4095854469”,“songmid”:["%s"],“songtype”:[0],“uin”:“0”,“loginflag”:1,“platform”:“20”}},“comm”:{“uin”:0,“format”:“json”,“ct”:24,“cv”:0}}’

​ 经过检查guid的数值似乎是固定值,因此这些数值均可以直接使用,仅需改变songmid的数值即可。而songmid的数值可以通过1中的json数据直接获取。因此,将’http://dl.stream.qqmusic.qq.com/'或者’http://ws.stream.qqmusic.qq.com/'直接与purl进行拼接即可。

2.2 VIP音乐处理

​ 在网页进行点击播放VIP音乐时会显示无法进行播放,针对这种情况,我们需要使用chrome浏览器模拟客户端登录。

在这里插入图片描述
在这里插入图片描述

​ 点击小手机图案便可以模拟手机登录,观察网页源码,惊喜的发现下载url就这样明晃晃的显示在眼前,像是大喜之夜的新娘,然而,当我使用request去get网页源码,发现非会员的url是可以直接显示的,然而会员的url我怎样也无法get到,由于笔者的js水平不行,不太懂这里面的玄机,待以后有机会学成归来,一探其中玄奥。虽然requests不行,但我们还是可以使用selenium来暴力获取,通过正则处理可以直接提取我们所需要的歌曲下载url。

​ 经我测试,获取完整的vip歌曲需要会员的cookie,否则尽可以获取片段。

3. 完整代码

import os,json
import re
from selenium import webdriver
from urllib.parse import quote
import time
import requests
import pickle
import random
def getcookie():
    driver = webdriver.Chrome('chromedriver.exe')
    driver.get('https://y.qq.com/')
    time.sleep(30)
    cookie = driver.get_cookies()
    driver.quit()
    with open('QQyy_cookie.pkl', 'wb') as f:
        pickle.dump(cookie, f)
    return cookie

def set_user_agent(<
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值