python爬取QQ音乐免费歌曲 2020.7.26

您所在的位置:网站首页 qq音乐解析网址在哪看 python爬取QQ音乐免费歌曲 2020.7.26

python爬取QQ音乐免费歌曲 2020.7.26

2023-12-28 16:48| 来源: 网络整理| 查看: 265

python爬取qq音乐免费歌曲 2020.7.26 目标分析获取音乐列表1.浏览器网络请求追踪2.寻找音乐列表 解析qq音乐1.下载连接组成2.获取vkey3.获取sign参数 关系图python代码

目标分析 做一个音乐爬虫。输入关键词,获取音乐列表与音乐下载连接 获取音乐列表 1.浏览器网络请求追踪

在这里插入图片描述 要做爬虫,必须要学会追踪网络请求,我用的是新版edge浏览器。打开qq音乐搜索界面右击空白处,选择检查。右边会出现开发者工具栏,先把缓存禁用了。 第一步点击红圈旁边的清除按钮,把刚刚的请求记录都清除了,刷新一遍网页,开发者栏出现了众多的请求,我们需要的任何信息都在里面

2.寻找音乐列表

在这里插入图片描述 找这种东西我没什么办法,一个个点开从预览中看看, 从这次的经验来看, media类型获取音乐,视频; script :js脚本 xhr:传递数据

我们要找的列表就是xhr类型

点击clien_search*****这个请求,预览中我们可以看到搜索到的歌曲的相关信息。因为你们已经知道了,所以你们可以直接在筛选器里面输入client_search查找这个请求,不必一个个找。

这个请求里的数据有什么用,后面会用到。

我们看看这个请求的标头,请求url为

[https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=61540511995365928&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=%E7%A5%9E%E8%AF%9D&g_tk_new_20200303=2012260984&g_tk=2012260984&loginUin=2925549673&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0]

这是编码过的url,我们需要解码一下,网上有许多url在线解码网站,我随便找了个 http://tool.chinaz.com/tools/urlencode.aspx

解码后是这样的

https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=61540511995365928&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=神话&g_tk_new_20200303=2012260984&g_tk=2012260984&loginUin=2925549673&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0

https是协议 c.y.qq.com是主机 soso/fcgi-bin/client_search_cp是路径 ?后面全是参数 &表示与的关系,用&分割的参数不分先后顺序 这些组成了一个合格的url

请求的参数解析 w=搜索关键词 loginuin=qq号 format=返回数据的格式 p=是否分页 n=请求数量

参数有些是必须的,有些是可选的,哪些可选你们可以自己试试

用这个url可以得到音乐列表的json格式,我们可以用python导入json包来解析数据。也可以使用json在线解析网站,随便找了个

https://www.bejson.com/explore/index_new/

解析qq音乐

接下来是获取下载链接,打开歌曲播放页面,刷新,追踪网络请求,选择查看meidia类型的请求

在这里插入图片描述 这是我用新版edge浏览器分析的截图,很明显3.4m大小的那个请求一定包含了歌曲下载链接

1.下载连接组成

打开上边的请求, url(解码后)为

https://ws.stream.qqmusic.qq.com/C400000k9jj51TOfNy.m4a?guid=659244375&vkey=71F5A262A9FB4DBCC2762A18AB1A5BE40951EE2D94FBDF5C0F66DA77BF24DD2B64D5170E9761C2159C5D514DC99C0AA05EBFDE9171BD7223&uin=0&fromtag=66

问题来了 这个url经我测试 它的路径,参数都是不一样的

主机ws.stream.qqmusic.qq.com大部分歌曲都是,少部分不是路径C400000k9jj51TOfNy.m4a每首歌都不一样,文件名guid659244375疑似不固定,在我的pc上一直都是这个vkey71F5A262A9FB*****非常长,每首歌一个uin0非必要fromtag66固定

所以说至少我们需要获取 vkey与路径才能得到下载链接

2.获取vkey

在筛选栏里输入vkey 找到了获取vkey的请求 在这里插入图片描述 同时在返回的数据里还包括了路径名,主机,guid。也就是说通过这个请求,我们可以拼出下载链接 而这个请求需要什么参数呢? 在这里插入图片描述

https://u.y.qq.com/cgi-bin/musics.fcg?-=getplaysongvkey5121797630605007&g_tk=2012260984&sign=zza2bkkmehc578lfnfhfbe4b20a449f79fe6ba709c01e6a1b11&loginUin=2925549673&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={“req”:{“module”:“CDN.SrfCdnDispatchServer”,“method”:“GetCdnDispatch”,“param”:{“guid”:“659244375”,“calltype”:0,“userip”:""}},“req_0”:{“module”:“vkey.GetVkeyServer”,“method”:“CgiGetVkey”,“param”:{“guid”:“659244375”,“songmid”:[“004Vl6HS0IKK6a”],“songtype”:[0],“uin”:“2925549673”,“loginflag”:1,“platform”:“20”}},“comm”:{“uin”:2925549673,“format”:“json”,“ct”:24,“cv”:0}}

这里面需要设置的参数只有两个:sign与data{} 在data{}里面需要设置guid(固定的),songmid,uin 其中uin是qq号,songmid在音乐列表里可以找到(获取音乐列表->寻找音乐列表)

最后的问题就只有一个 如何获取sign参数

3.获取sign参数

凭我的烂文笔与知识水平讲不明白,给你们个链接自己看 https://blog.csdn.net/weixin_44159306/article/details/106292092 总的来说就是要调用一下js脚本得出sign参数

如何调用js脚本 https://blog.csdn.net/IKNOWNU/article/details/83784146

关系图

在这里插入图片描述

python代码

https://download.csdn.net/download/riverfisher2000/12663387 上传源码被说是,‘版权投诉’等等看把



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3