异步协程爬取qq音乐,搜索想要查询的歌手即可

import json
import time
import  requests
import aiohttp
import  asyncio
import aiofiles

async def aio_muisc(purl,failname):
    url='https://dl.stream.qqmusic.qq.com/'+purl
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as resp:
            async with aiofiles.open(failname,'wb') as file:
                await file.write(  await resp.content.read())
    print(f'{failname}下载完毕')

async  def download_music(name):
    tasks = []
    for i in range(1,11):
        url=f'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.top&searchid=56680992704294447&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p={str(i)}&n=10&w={name}&_=1632819737137&cv=4747474&ct=24&format=json&inCharset=utf-8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0&uin=1246021400&g_tk_new_20200303=1459076162&g_tk=1459076162&hostUin=0&loginUin=1246021400'

        headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'}

        resp=requests.get(url,headers=headers).text
    #print(resp.text)
        resp_json_dict=json.loads(resp)
    #print(resp_json_dict)
        music_list=resp_json_dict['data']['song']['list']
    # print(music_list)
        for item in music_list:
        #print(item)
            song_mid=item.get('mid')      #歌曲mid
            song_name=item.get('name')     #歌的名字
            singer_name=item.get('singer')[0].get('name')   #歌手名字
        #print(song_mid,song_name,singer_name)
            url2='https://u.y.qq.com/cgi-bin/musicu.fcg'
            params1 = {
                '_': time.time() * 1000,
                'sign': 'zzakgej75pk8w36d82032784bdb9204d99bf6351acb7d',
                "data": '{"req":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"7469768631","songmid":["' + song_mid + '"],"songtype":[0],"uin":"1164153961","loginflag":1,"platform":"20"}}}'
        }
            response=requests.get(url2,params=params1,headers=headers)
            dict=json.loads(response.text)
            #print(dict)
            #purl就是下载地址的一部分
            purl=response.json()['req']['data']['midurlinfo'][0]['purl']
            #print(purl)
            if purl=='':
                print('无法下载')

            filename = 'qq音乐/' + song_name + '--' + singer_name + '.mp3'

            task=asyncio.create_task(aio_muisc(purl,filename))
            tasks.append(task)
        await asyncio.wait(tasks)


if __name__ == '__main__':


        asyncio.run(download_music(name=input('请输入你要查找的歌手')))
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值