爬虫爬取下载qq音乐,又跟新的风口相关?(附源码和资料)

    技术2022-07-10  150

    ↑ 点击上方 “一行数据” 关注 + 星标 ~ 

    每周送书,绝不错过

    image

    今年的风口一个接着一个,高产似母猪

    年初就骗我屯口罩,现在口罩都降到1毛钱了,我家里的10斤口罩不知道能用到什么时候

    后来又骗我屯头盔,刚屯买完头盔,居然说骑电瓶车又不用带头盔了???现在家里亲戚骑自行车的小孩都被强行带上头盔了,对只是为了安全着想

    再后来地摊经济又开始了,没有防备一场大雨又让我们回到了解放前,只记得那场大雨之后天台又挤满了很多人

    这些风口就像周董的歌词一样,“爱像一阵风,吹完它就走”。真是太无情了

    最近又迎来新来的风口,准确来说是从年初持续的一直在刮,就是微信的视频号,下半年视频领域将可能在线上复制当年的百团大战(拭目以待),之前行哥也分享了视频制作的相关教程,后台回复“pr”就可以获取咯

    如果要做视频,其中一个蛮重要的环节就是音乐,音乐可能相当于视频的灵魂

    作为一个python爱好者,能不能用代码自动下载音乐的想法就立马蹦出,说干就干

    qq音乐代码案例

    爬取原理很简单

    首先我们先来到QQ音乐的官网:https://y.qq.com/,在搜索栏上输入一首歌曲的名称;

    如我在上输入最美的期待,按回车来到这个画面

    我们首先要得到这些歌曲名称和其他一些信息,鼠标右键查看源代码发现这些数据应该应用了反爬虫,鼠标右键点击检查,点击NetWork,然后点击XHR,按F5刷新,然后点击

    https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=66920929169890801&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=最美的期待&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0这个网址,如下图:

    发现这里好像有我们需要的数据

    image

    那么这个网址要怎样才能得到呢!其实也不难发现,就下面的那个w=不同而已,对于不同歌曲。

    而这个w=后面的那个数据好像就是我输入的歌曲名,最美的期待,只不过这里对于这个进行了编码罢了。

    我们只要这样输入就可以了

    from urllib import parse w=parse.urlencode({'w':input('输入歌名:')}) url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=63229658163010696&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&%s&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'%(w) print(url)

    这样我们就得到了这个url

    这样得到的数据是一个字符串,这个字符串类似‘{'key':{'key_1':1}}’,我们可以导入json模块,来处理它,这样我们得到的数据就是一个字典了。

    我们点击其中的一首歌试听,来到这个界面

    image

    右击鼠标,点击检查,点击NetWork,点击XHR,找到下面这个网址发现

    image

    在这里我们可以发现有这首歌曲的下载地址,发现purl下面的一个参数是上面得到的那个数据中的’mid‘,只要将两者结合起来,就可以下载这首歌曲了。

    源代码如下

    import urllib.parse as parse from urllib.request import urlretrieve import requests import json import os import time import sys def Time_1():  # 进度条函数     for i in range(1, 51):         sys.stdout.write('\r')         sys.stdout.write('{0}% |{1}'.format(int(i % 51) * 2, int(i % 51) * '■'))         sys.stdout.flush()         time.sleep(0.125)     sys.stdout.write('\n') print(''' 公众号:一行数据 ''') w = parse.urlencode({'w': input('输入歌名:')}) url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=63229658163010696&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&%s&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0' % (     w) content = requests.get(url=url) str_1 = content.text dict_1 = json.loads(str_1) song_list = dict_1['data']['song']['list'] str_3 = '''https://u.y.qq.com/cgi-bin/musicu.fcg?-=getplaysongvkey5559460738919986&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"1825194589","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"1825194589","songmid":["%s"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}''' url_list = [] music_name = [] for i in range(len(song_list)):     music_name.append(song_list[i]['name'] + '-' + song_list[i]['singer'][0]['name'])     print('{}.{}-{}'.format(i + 1, song_list[i]['name'], song_list[i]['singer'][0]['name']))     url_list.append(str_3 % (song_list[i]['mid'])) id = int(input('请输入你想下载的音乐序号:')) content_json = requests.get(url=url_list[id - 1]) dict_2 = json.loads(content_json.text) url_ip = dict_2['req']['data']['freeflowsip'][1] purl = dict_2['req_0']['data']['midurlinfo'][0]['purl'] downlad = url_ip + purl try:     os.mkdir('./QQ音乐') except:     pass finally:     try:         print('开始下载...')         urlretrieve(url=downlad, filename='./QQ音乐/{}.mp3'.format(music_name[id - 1]))         Time_1()         print('{}.mp3下载完成!'.format(music_name[id - 1]))     except Exception as e:         print(e, '对不起,你没有该歌曲的版权!')

    运行结果如下:

    image

    当然这个代码有个缺点,就是不能下载付费歌曲,网上大部分下载qq音乐付费歌曲的代码大多都只是个噱头,毕竟腾讯每年花几百上千万的安全人员不是吃白饭的,所以涉及到付费歌曲下载的代码这里先不提。

    「参考:https://www.cnblogs.com/liuze-2/p/12409823.html」

    不仅仅是qq音乐

    技术爱好者的第一思维这个程序我能不能实现,如果效率高那还好,如果不高的我们可以借鉴其它现成方法,之前行哥也分享过使用一行代码下载全网视频音乐,想了解了的可以去看一下

    你敢信?一行python代码能下载全网视频

    当然还有很多不会写代码的读者想在网上直接下载,但须注意不得侵犯他人版权。这里行哥也搜罗了很多免费好用的无版权的音乐来源供大家使用:

    FreePD:用 emoji 表情来指代歌曲风格,十分形象,网站中所有的歌曲都可以单独免费下载,你也可以选择花费 10 美元一次性下载 800 个音乐。

    爱给网:中文网站爱给网包含了免费可商用的音乐素材和商用素材,选择 CC 协议类素材库即可下载免费可商用的音乐素材。

    audionautix:该网站音乐可免费使用,但需标明音乐来源于该网站。

    musopen:网站提供的音乐大部分是古典音乐,全部都可以免费下载。

    soundcloud:soundcloud 提供了大量的免费商用音乐素材,搜索类型后,选择可商用传播的音乐素材即可。

    bensound:bensound 里的音乐均可免费下载,但需注明音乐来源于该网站。

    YouTube 免费音乐库:YouTube 免费音乐库中所有音乐均可免费下载。

    往期推荐

    对了,可以加下行哥微信好友,私聊回复「02」可以领取5T编程资料哦

    无论做什么,积累才是王道

    祝三连的读者今年能再暴富一次!!!!!

    一行数据 Python 数据分析 爬虫与机器学习 python超级爱好者,公众号「一行数据」关注领取5T编程资料,有任何学习问题都可以联系我,微信data_ecology,从入门到就业
    Processed: 0.012, SQL: 9