最新爬取QQ音乐

分析QQ音乐

首先打开相关音乐栏目页面,我们可以看到页面中失去了选择下一页了,被腾讯屏蔽了,强制要求下载,但是我们是爬虫工程师呀,怎么可能会被拦阻
没有更多了,回去吧,别爬了请认真对待,你是一个爬虫工程师,要这些表面的干什么,你要的是内在的,你要有内涵的

那么分析一下音乐的地址在哪里,我们最主要的就是资源地址

找出资源的请求地址,好了,咱们直接用 这个资源地址爬取就可以了
把url提取出来看看
这是我们找到的2条资源地址,这个地址,我们看看有什么规律
http://isure.stream.qqmusic.qq.com/C4000026JiCu2LASHc.m4a?guid=7107896008vkey=76C1EFA596C08CFB7934D51F0B3567629FFCFA00064C8E3FAE093A0B923E26A7540DDF5E9A538E4CCF2F6DD21EE81F82D635C294DCB05E4&uin=264&fromtag=66

http://isure.stream.qqmusic.qq.com/C400003kyC5M3AOStX.m4a?guid=7107896008vkey=FDB3D896A7FFF5B337CBB133DBA7D961D3D14413DD3324A9FDDB1F6EDE8AB2DD8D16369046E9D32E5F16FF244BCCDEE43087B830252D05B&uin=264&fromtag=66

如果用requests请求的话,那么这两首歌就可以直接爬下来了,那么我们就直接完成,哈哈开玩笑,进读条就知道还没完

/C4000026JiCu2LASHc.m4a?
guid=7107896008
vkey=76C1EFA596C08CFB7934D51F0B3567629FFCFA00064C8E3FAE093A0B923E26A7540DDF5E9A538E4CCF2F6DD21EE81F82D635C294DCB05E4
&uin=264
&fromtag=66

/C400003kyC5M3AOStX.m4a?
guid=7107896008
vkey=FDB3D896A7FFF5B337CBB133DBA7D961D3D14413DD3324A9FDDB1F6EDE8AB2DD8D16369046E9D32E5F16FF244BCCDEE43087B830252D05B
&uin=264
&fromtag=66

通过对比知道 guid,uin, fromtag 都是不变的
/C400(这部分不一样).m4a?以及vkey也不一样,我们看看能不能找到这部分的值呢media_mid:  "0026JiCu2LASHc"    C4000026JiCu2LASHc  = 'C400' + media_mid找出一个 :media_mid: “0026JiCu2LASHc” C4000026JiCu2LASHc = ‘C400’ + media_mid

还差vkey,这个有点难找,我再找一下看看规律
。。。。。。。。
。。。。。。。。
。。。。。。。。

30分钟后,终于找出来了
在这里插入图片描述vkey在这里,现在我们筛选一下,把一些没用的参数去掉,反复分访问这个链接,同时删减参数,最后得到的url,其中最重要的参数songmin,guid,uin 这三个参数,后面两个guid,uin是登录后才可以获取,可以通过selenum自动获取,也可以手动自己去复制也可以,这里直接复制就好了

看一看
https://u.y.qq.com/cgi-bin/musicu.fcg?&data={“req”:{“param”:{“guid”:""}},“req_0”:{“module”:“vkey.GetVkeyServer”,“method”:“CgiGetVkey”,“param”:{“guid”:"",“songmid”:[“000IN0Mn3d37fv”],“uin”:""}},“comm”:{“uin”:}}

那么现在直接上代码

import requests
import json


class QQmusic:
    def __init__(self):
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
        self.sl = []
        self.musicList = []

    # 获取页面
    def getPage(self,url,headers):
        res = requests.get(url,headers = headers)
        res.encoding = 'utf-8'
        return res

    # 获取音乐songmid
    def getSongmid(self):
        num = int(input('请输入获取条数:'))
        # num = 20
        name = input('请输入歌名或歌手:')
        # name = '张学友'
        url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=%d&w=%s'%(num,name)
        # 搜索音乐
        res = self.getPage(url,headers=self.headers)
        html = res.text
        html = html[9:]
        html = html[:-1]
        # 获取songmid
        js = json.loads(html)
        songlist = js['data']['song']['list']
        for song in songlist:
            print(song)
            songmid = song['songmid']
            name = song['songname']
            self.sl.append((name,songmid))
            print('获取成功songmid')


    # 获取音乐资源,guid是登录后才能获取,nin也是
    def getVkey(self):
        guid = input('请输入guid:')
        uin = input('请输入uin:')
        for s in self.sl:
            print('开始获取资源')
            # 获取vkey,purl
            name = s[0]
            songmid = s[1]
            keyUrl = 'https://u.y.qq.com/cgi-bin/musicu.fcg?&data={"req":{"param":{"guid":" %s"}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"%s","songmid":["%s"],"uin":"%s"}},"comm":{"uin":%s}}'%(guid,guid,songmid,uin,uin)
            res = self.getPage(keyUrl,headers=self.headers)
            html = res.text
            keyjs = json.loads(html)
            purl = keyjs['req_0']['data']['midurlinfo'][0]['purl']
            # 拼凑资源url
            url = 'http://dl.stream.qqmusic.qq.com/' + purl
            self.musicList.append((name,url))
            print('资源地址获取成功')

    #   下载音乐
    def downloadMusic(self):
        for m in self.musicList:
            url = m[1]
            res = self.getPage(url,headers=self.headers)
            music = res.content
            name = m[0] + '.mp3'
            with open(name, 'wb') as f:
                f.write(music)
                print('下载OK')
                f.closed

QQ = QQmusic()
QQ.getSongmid()
QQ.getVkey()
QQ.downloadMusic()
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值