爬取全民K歌用户歌曲

因为全民K歌下载用户的歌曲需要VIP,所以本次教你如何爬取全民K歌用户的歌曲下载打包到本地,只需要用户的K歌号并且没有浏览记录。
需要提前了解的知识:request请求,re正则表达式,fiddle抓包,文件存储

下面进入正题:理一遍思路:首先找到用户主页url -> 找到用户所有的歌曲的url以及其他信息 -> 进入单首歌曲页面抓取音频数据

首先需要找到用户主页的url,这里我们先用抓包试试
连上代理,进入用户主页,发现没有抓到用户主页相关的数据这里写图片描述
于是我们转换思路:
发现全民K歌点击分享链接用电脑打开能进入用户主页这里写图片描述
并且url = http://kg.qq.com/node/personal?uid= + 用户的K歌号 所以思路就明确了,找到用户的k歌号就能进入用户首页,所以接下来我们需要找到该用户所有的歌曲
这里写图片描述
按f12审查元素,发现存有每首歌曲的url以及图片标题等信息,但是只有显示已经加载了的歌曲,没有加载就没有显示,这是远远不够的

这里写图片描述
于是我们下拉页面,发现有个 ‘查看更多’选项,点击之后页面加载的tag也变多了,因此我们这里可以使用selenium来模拟浏览器点击查看更多来进行抓取页面元素
但是我们这里使用另一种方法:
点击查看更多,发现fiddle抓取到了链接表单,打开后
这里写图片描述
这里写图片描述
**

url  = 
http://node.kg.qq.com/cgi/fcgi-bin/kg_ugc_get_homepage?jsonpCallback=callback_0&g_tk=1270463893&outCharset=utf-8&format=jsonp&type=get_ugc&start=2&num=8&touin=&share_uid=679d998d222e358d&g_tk_openkey=1270463893&_=1536468638423**

删除掉无用的参数后

url = 
'http://node.kg.qq.com/cgi/fcgi-bin/kg_ugc_get_homepage?jsonpCallback=callback_0&type=get_ugc&num=8&share_uid=' + uid + '&start='

其中uid为用户的K歌号,start参数为用户页面的歌曲列表编号,一次能加载8首歌曲,start = 1时为初始歌曲,循环即可得到用户所有的歌曲表单

所以进入下一步骤,得到每首歌的url,通过主页点击歌曲之后发现url = http://node.kg.qq.com/play?s=L0LoLNL9WW6h_LrU&g_f=personal
这个play参数是什么呢,因为用户能够分享歌曲,所以猜测应该为shareid
即每个表单的这个部分
此外 表单中的其他参数即为图片,标题,评论数等其他信息,需要可自取
这里写图片描述
所以歌曲url = http://node.kg.qq.com/play?s= + shareid

最后一个环节,歌曲页面中抓取音频文件信息
打开页面,fidder如图
这里写图片描述
这个链接即为音频的真正文件,进入歌曲页面搜索这个url
这里写图片描述
所以我们只要用正则提取出其中的字典并提取就完成,然后request请求下载
思路已经ok,接下来开始代码编写:

这里写图片描述
首先定义各个参数,用户主页url 歌曲表单listurl,歌曲名字audionames,歌曲页面raw-url,音频链接audiourls,存放地址address
以及通用请求request方法

这里写图片描述
我们请求listurl,正则去掉头尾,剩下的就是标准的json字典了,提取出需要的歌曲名字,以及歌曲url并存储

这里写图片描述
现在已经得到所有用户主页的列表,然后用正则提取出每个音频文件的url并存储
这里写图片描述

最后保存到需要的path目录
这里写图片描述
创建文件夹目录以及用循环得到所有的列表表单这样就完成了抓取了

当然我们可以编写命令行更加便捷
这里写图片描述

最终效果展示:
这里写图片描述
这里写图片描述

相关源码已经上传至我的github:https://github.com/hchar/python-practice

猜你喜欢

转载自blog.csdn.net/weixin_43164671/article/details/82557190