QQ音乐爬虫程序详细解析(一)——歌曲下载模块

news/2024/7/19 12:29:33 标签: 爬虫, json
  • 前言

 

       完整的QQ音乐爬虫程序分两个部分: 歌曲下载模块  +  歌曲详细信息提取模块

    

  • 歌曲下载模块构建

 

网页构成分析:

 

1)找到QQ音乐的下载网址

    

      播放页面中,刷新F5,查看文件类型,有个type 为媒体文件media  且比较大 几M,点进去看;

 

 

 

 

然后就找到了本歌曲的下载网址:

 

 

 

 

 

2)分析网址:

 

取两首歌曲的网址对比:

 

http://dl.stream.qqmusic.qq.com/C400003YDLNN4EIffX.m4a?vkey=A308D712991EBD1D53F9B5838A4C3701CB555FA14CF338E75815DA7464FA79167A44352CD7682EAC7ABBD29CFA2A27BEBA9C8273E8E8CB00&guid=6964837424&uin=0&fromtag=66

 

 

 

http://dl.stream.qqmusic.qq.com/C400001O6xe10VDdA5.m4a?vkey=2B345A6EFF534205F7D3FC37CB6526A99172E2F0D5AD657103EAA023A9F3F7EB035D12C510CA67897F255C31A9CD6911B6AF761CD0619226&guid=6964837424&uin=247990761&fromtag=66

 

 

规律:

http://dl.stream.qqmusic.qq.com/(fileindex.m4a?(vkey=?)guid=6964837424&uin=247990761&fromtag=66

 

需要提前歌曲链接得参数:

  • fileindex
  • vkey

 

guid/uin/fromtag每首歌都是一样的

 

然后任务变成找到提前歌曲参数的链接,提取信息;

 

3)提取生成歌曲链接所需参数:

   

   先记住我们要找的东西:

        fileindex 例如  C400003YDLNN4EIffX

        vkey        例如vkey=A308D712991EBD1D53F9B5838A4C3701CB555FA14CF338E75815DA7464FA79167A44352CD7682EAC7ABBD29CFA2A27BEBA9C8273E8E8CB00

   

    在歌单页面,进行元素审查,我们都知道QQ音乐采用的是JSON动态返回的方法,所以去JSON信息中去找这个歌单下歌曲的信息,看能不能有所收获:

            

 

 

发现这个文件下有song_list ,刚好J记录这一页歌单所有歌曲的一些信息:

 

 

 

进一步查看:比如第一首歌曲

 

 

 

 

 

好像看到一些有意思的东西,albummid 格式有点像我们要的fileindex? 对不对? 验证一下:

 

把这首哥的地址查看下:

 

http://dl.stream.qqmusic.qq.com/C400002kpGuj0eD0SW.m4a?vkey=DDE737BFC8E7657EFD5370BE030349BE58436CF05659F534036EB9BD4CEA58555B39B49AEF245DB76C7CBD27F4D1B59B92D1DEA6159A1C8D&guid=6964837424&uin=247990761&fromtag=66

 

albummid的值格式有点像 fileindex ,但是值!= C400002kpGuj0eD0SW 所以,应该不是我们要找的;

ctrl+F5  元素分析中搜索 C400002kpGuj0eD0SW. 

 

 

 

 

 

居然没有找到!!  难道是什么地方搞错了??仔细一看,songmid=2kpGuj0eD0SW 这个匹配 ,再看 规律是 C4000+songmid -> FILEINDEX:

 

修改下歌曲URL的规律:

http://dl.stream.qqmusic.qq.com/C4000(+songmid).m4a(+vkey=xxxx)guid=6964837424&uin=247990761&fromtag=66

 

所以通过提取fcg_ucc _xxx  这个文件的链接下的内容,可以得到歌单下所有歌曲的 songmid;(敲黑板,画重点)

 

继续找vkey ing...........................

 

在歌单页面的json信息和XHR中都找不到vkey.....

 

点击进入歌曲页面,元素审查查找:

 

找到了对应歌曲的vkey的内容:

 

 

 

 

9528911464323242

 

对应的URL链接:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&jsonpCallback=MusicJsonCallback8283129727027805&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback8283129727027805&uin=247990761&songmid=002kpGuj0eD0SW&filename=C400002kpGuj0eD0SW.m4a&guid=6964837424

 

 从这个链接可以提取cool的vkey值;but 怎么提取整个歌单下面所有歌曲的vkey值呢?....................

 

分析上面这个链接个规律:(还是用对比法吧!)

 

另一首歌的:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&jsonpCallback=MusicJsonCallback14456243607230945&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback14456243607230945&uin=247990761&songmid=001O6xe10VDdA5&filename=C400001O6xe10VDdA5.m4a&guid=6964837424

 

特异性的参数标注如下:

 

 

 

 

建立一个通用的可以提取所有歌 vkey的URL地址公式:

 

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&jsonpCallback={0}&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&callback={1}&uin=247990761&songmid={2}&filename=C40000{3}.m4a&guid=6964837424.format(jsonpCallback,callback,songmid,songmid)

 

目前需要提取得参数:jsonpCallback,callback  ...............

 jsonpCallback 和callback  还有可以简化的规律,他们都相同,且遵循:

    ”MusicJsonCallback”+ “一个相同的ID值”

 

现在需要找到这个ID值: .......

找了一圈没有找到,怎么办,草泥马飞过~~~~

 

难道jsonpCallback,callback参数可有可无!!??

 

试试下面的网址,删除了jsonpCallback,callback

 

 

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&uin=247990761&songmid=001O6xe10VDdA5&filename=C400001O6xe10VDdA5.m4a&guid=6964837424

 

居然访问成功!!!再次一万匹草泥马飞过~~~~

 

自此,大功告成,修改前面有歌 通用vkey的URL地址公式:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&&uin=247990761&songmid={0}&filename=C40000{1}.m4a&guid=6964837424.format(songmid,songmid)

 

总结:

 

1)歌曲下载通用地址:"http://dl.stream.qqmusic.qq.com/C400{0}.m4a?vkey={1}guid=6964837424&uin=247990761&fromtag=66".format(songmid,vkey)

 

(2)songmid 在歌单页面,json中可以得到当前页面所有歌的songmid;

 

(3)vkey 的提取URL地址 :

 

 “https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1160855065&&loginUin=247990761&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&cid=205361747&&uin=247990761&songmid={0}&filename=C400{1}.m4a&guid=6964837424”.format(songmid,songmid)

 

4)歌曲对应唯一的songmid  ->  vkey的地址  -> 唯一的vkey  -> 得到歌单里每一首歌曲下载地址

 

  歌曲下载的地址爬取完成!!

 

歌曲下载部分示例代码:

 

download_music只负责单个歌曲下载功能;输入一个对应歌曲的songmid (songmid在歌曲详细信息函数提取,并将多个music的信息分别送入download_music),得到对应歌曲的下载文件输出;

 

 

 

 

 
 
 
 

 

 

 

转载于:https://www.cnblogs.com/songwei1/p/7860758.html


http://www.niftyadmin.cn/n/961782.html

相关文章

小米智能插座拆解

小米智能插座采用内卡扣封装形式,插座外观上并没有使用螺丝,从照片上可以看到小米智能插座的塑料外壳封装紧密度非常高,在拆开这个插座时,花了不少时间和力气,终算完好拆下后盖板。 建议两个人,工具用刀片…

机器学习笔记(3):多类逻辑回归

仍然是 动手学尝试学习系列的笔记,原文见:多类逻辑回归 — 从0开始 。 这篇的主要目的,是从一堆服饰图片中,通过机器学习识别出每个服饰图片对应的分类是什么(比如:一个看起来象短袖上衣的图片,…

Perfect Drink 智能电子秤 拆解

各个模块之间的连接线比较细,要小心防止扯断 系统原理分析,见下图 图片上传一直有问题,显示不出来,第一次遇到,真郁闷! 抱歉大家!

微信公众平台针对iBeacon 增加摇一摇周边功能

摇一摇周边,是公众平台为线下商户提供近距离连接用户的能力,支持线下商户向周边用户提供个性化营销、互动及信息推荐等服务。 一、功能特性: 摇一摇周边是微信针对低功耗蓝牙硬件(支持iBeacon协议,下文简称“iBeacon设…

关于NGUI中UISprite的一个小bug

最近学习NGUI时发现一个小bug:由预制对象生成的精灵代码修改图片后在鼠标进入后失去焦点后会变回预制对象精灵图片左上角精灵用于展示被点击的精灵图片图一:正中央用预制对象生成的精灵在鼠标未进入时图二:当鼠标进入精灵后离开为此&#xff…

30天自制操作系统学习-第1天

第一天 1 批处理文件:直接由DOS命令行解释执行的文件,通常后缀名为.bat或.cmd。 2 镜像文件:.img后缀的文件,可用于制作操作系统文件,一个3.5英寸的软盘容量为1440k。 3 nask:作者自己制作的汇编代码编译器,代码与nasm代码相差不大。 4 qemu:虚拟机的一种,命令行操作。 在作者…

postgresql登录后常见命令

2019独角兽企业重金招聘Python工程师标准>>> postgresql登陆完成。可以列出很多命令,下面介绍一些常见命令。输入?可以看到 test# \? 一般性\copyright 显示PostgreSQL的使用和发行许可条款\crosstabview [COLUMNS] 执行查询并且以交叉表显…

CC2540与CC2541的区别

http://see.sl088.com/wiki/CC2540%E4%B8%8ECC2541%E7%9A%84%E5%8C%BA%E5%88%AB 目录 [隐藏] 1 发现2 困扰3 基本特性差异 3.1 特性差异3.2 CC25403.3 CC2541 4 引脚差异 4.1 CC25404.2 CC2541 5 见识 5.1 个人局域网 - 蓝牙低耗能技术 - CC2541 - TI 沿途见识[1]5.2 CC2540和…