python利用charles爬虫爬取下载qq音乐歌单里的歌曲——多进程

本文介绍了如何使用Python和Charles爬虫工具下载QQ音乐歌单中的歌曲。通过分析抓包数据,找到歌曲的URL、提取songmid和vkey,最终实现多进程下载。详细步骤包括:查找206状态码的URL,分析URL结构,获取songmid和vkey,以及使用sys.stdout.write记录下载进度。
摘要由CSDN通过智能技术生成

因为这是我第一个独立实践的爬虫项目,所以这次把思路都放上来了

特别注意,用的是charles,可以拦截查看url

知识点:

·······利用charles分析网页,抓包,得出对应URL

·······json网页不是可以直接用json.load 直接转换json的

·······利用find_path快速找到所需内容的路径

······学会用try,预防程序中断

·······urltrieve下载文件可以添加回调函数

·······多进程使用

·······利用sys.stdout.write 记录进度

============先打开charles,再操作qq音乐

1.打开qq音乐页面,进入我的音乐


2.选择我创建的歌单


3.选择其中一个歌单


4.进入歌单,随便选一首歌,点击播放



5.最后就进入了这个页面,可以播放歌曲了


==========================================================

好了,现在可以看看charles上有哪些url

特喵的,这么多,怎么入手?


思路:

①不一定要跟着步骤去找url,可以反过来的嘛

    先找歌曲文件mp3(原来是m4a格式)

    找code是206的url,206一般是歌曲跟视频下载什么的

    找到了,不过这个url好像有点儿复杂

  

    我把这个url分析了下:

     

       不同歌曲间,只需改变那2个变量即可下载!

②那么,如何得到那个m4a跟 vkey呢?

    这时就是charles大显神威了,直接ctrl+f,搜索那2个变量,直接vkey就行了!

    

    看,结果是2部分,分别是2个网址,下面那个就是歌曲的url了,复制的文本是在Request URL跟Header,那就是刚刚从这里赋值过来的,所以忽略,主要看上面那个

    Response Body:206,,,对了,看来vkey就是出自这个网址了,点击进去

    

        OK,看来找到vkey跟filename的出处了,那么下一步就是分析这个URL的组成了

        PS:注意,如果进入这个网址,构造的时候需要在header加上referer:https://y.qq.com/portal/player.html

     很明显,这个url也很鸡儿复杂,我还得分析:

        

③:看上去这个url很复杂,实际只需2个变量!songmid跟filename,不过仔细一看,这2个变量其实只需songmid就行了,

    因为filename=C400+songmid,这时就继续利用charles,ctrl+F 看看这个songmid出自哪里

    搜索结果如下:


    包含songmid字串符的url有这么多,而我的目的页面是这个:

    

    包含360多首歌的songmid,经过对比就是上面qzone跟splcloud这2个网址,我就选了qzone这个继续分析了

    

    OK!所有歌曲的songmid都在里面了,剩下来就再分析这个URL的组成了             PS:referer:'https://y.qq.com/n/yqq/playlist/2986328419.html'

     

===============================================

所需的网址全部找出来了,现在把思路整理下:

1.进入包含所有songmid的歌单URL:得到songmid

https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&disstid=2986328419&format=jsonp&g_tk=1547190586&jsonpCallback=playlistinfoCallback&loginUin=2020197426&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0

    referer:https://y.qq.com/n/yqq/playlist/2986328419.html

2.进入songmid的URL:得到对应的vkey

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=1547190586&jsonpCallback=MusicJsonCallback7615551634069047&loginUin=2020197426&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback7615551634069047&uin=2020197426&songmid=003EsQzm2RJPmv&filename=C400003EsQzm2RJPmv.m4a&guid=4670078301

    referer:https://y.qq.com/portal/player.html

3.得到歌曲的URL,可以直接下载了

http://dl.stream.qqmusic.qq.com/C400003EsQzm2RJPmv.m4a?vkey=6569916EE22DF54C0EB5DFBFE390B426B6F97153BF510DF12D36C4E1A72EF04E528CE77655E19B1DC6F6533B893EC217BF440DA84363ED3B&guid=4670078301&uin=2020197426&fromtag=66


=========================================================

现在终于可以写代码了!

一、先搞歌单这部分

 

import requests,json,re,urllib,os

url='https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&disstid=2984189527&format=jsonp&g_tk=1547190586&jsonpCallback=playlistinfoCallback&loginUin=2020197
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值