99V久久综合狠狠综合久久|久久se无码精品一区二区|99国产精美欧美一区二区|久久99国产精品亚洲

QQ音樂(lè)MP3下載!

2021-01-13 14:42:12  閱讀:-  來(lái)源:

QQ音樂(lè)MP3下載


QQ音樂(lè)MP3下載


沒(méi)錯(cuò)本次寫的內(nèi)容的對(duì)象是我們熟知的QQ Music。

本篇文章涉及內(nèi)容包括:Python,爬蟲(chóng),json解析,request 庫(kù)的使用

緣起

前幾天刷B站無(wú)意中又刷到了一首神曲,“I Want My Tears Back”,挺好聽(tīng)的。聽(tīng)了幾遍后便尋思著能不能把這歌給下到手機(jī)上拿來(lái)當(dāng)鬧鐘的,聽(tīng)過(guò)的同學(xué)應(yīng)該知道這歌有多提神,哈哈哈~~~

沒(méi)聽(tīng)過(guò)的同學(xué)可以點(diǎn)擊文章上方的音樂(lè),感受一下下。

動(dòng)手分析

接下來(lái),當(dāng)然要選擇一下從哪個(gè)平臺(tái)下搞這首歌回來(lái)啦。網(wǎng)易云音樂(lè)和QQ音樂(lè),選擇哪個(gè)?那就從網(wǎng)易云入手吧,畢竟用的多些,接著便去網(wǎng)易云一頓操作,此處省略1000字描述。發(fā)現(xiàn),哎呦,這網(wǎng)易云……不好搞呀。所以先不管了,看一下QQ音樂(lè)的情況先。

F12大法一開(kāi),QQ音樂(lè)就先給我來(lái)了個(gè)驚喜,大大符號(hào)圖標(biāo)傾情相送。對(duì)比云村的就沒(méi)有啦。


QQ音樂(lè)MP3下載


撇開(kāi)這些不關(guān)鍵的東西不說(shuō)了,接下來(lái)就是搜索一首歌。

這個(gè)時(shí)候,先把控制臺(tái)切到network欄,這個(gè)時(shí)候,你會(huì)發(fā)現(xiàn)左下角有很多請(qǐng)求鏈接。請(qǐng)求各種各樣的內(nèi)容,這個(gè)時(shí)候,這些東西對(duì)我們都是沒(méi)用的,是吧。我們要的是我們請(qǐng)求搜索那一瞬間他發(fā)出去的數(shù)據(jù)。所以,為了避免無(wú)關(guān)數(shù)據(jù)的干擾,建議點(diǎn)擊左上角的清空把記錄清空先。然后右上角勾上disable cache,避免緩存使我們看不到我們要的數(shù)據(jù)。

QQ音樂(lè)MP3下載


ok,這個(gè)時(shí)候我們輸入我們要查的歌,I Want My Tears Back。我們已經(jīng)可以看到有東西已經(jīng)發(fā)出去并返回回來(lái)了。就是這個(gè)鏈接

QQ音樂(lè)MP3下載


https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?is_xml=0&key=I Want My Tears Back&g_tk=1419336673&loginUin=824368xxx&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0

我們觀察一下,這里面的參數(shù),key就有I Want My Tears Back這個(gè)歌名了,再看一下返回?cái)?shù)據(jù)。是一個(gè)json數(shù)據(jù),有很多內(nèi),我們可以很容易看出了數(shù)據(jù)包含了 專輯、mv、歌手、歌曲 這四大區(qū)域。我們關(guān)注歌曲這個(gè)欄,在count 中已經(jīng)表明找到了兩首符合度最高的歌曲。一首是Nightwish的一首是Hok-key的。因?yàn)槲蚁胍木褪?夜愿 這個(gè)版本的,所以我們就默認(rèn)第一首出現(xiàn)的就是我們要下的歌曲哈。

QQ音樂(lè)MP3下載


這個(gè)時(shí)候,拿到這些數(shù)據(jù)有什么用呢?歌曲鏈接還沒(méi)不知道怎么構(gòu)造呀。。。

先別急,我們看看歌曲鏈接長(zhǎng)啥樣。然后…………

QQ音樂(lè)MP3下載


QQ音樂(lè)MP3下載


好尷尬呀,有木有,這,這誰(shuí)忍得住呀?所以,機(jī)智的我打開(kāi)了另外一首歌……

瞬間右邊記錄出來(lái)了一大堆,沒(méi)錯(cuò)是一大堆東西……但是,控制臺(tái)有分類呀,不慫。選擇media分類,就給我們過(guò)濾出了那幾個(gè)鏈接。

QQ音樂(lè)MP3下載


沒(méi)辦法了,逐個(gè)點(diǎn)擊。1分鐘過(guò)后,I got it.最后那個(gè)鏈接就是歌曲鏈接。

https://isure.stream.qqmusic.qq.com/C400000JHuWh4fOBxD.m4a?guid=8665097290&vkey=A78C373DCB421D9DA3B1C3A87979A32A6062159F032C2D44C83BDD8D9D1F717B429F6C92A6C2720A1DB18AC835D4E6FCD409D6F0D0CE6F21&uin=7642&fromtag=66

可以清楚看到有幾個(gè)關(guān)鍵參數(shù)。guid、vkey、uin、fromtag,我們先暫且不管那個(gè)參數(shù)可以省略好吧。先看看可以從哪里找到這幾個(gè)參數(shù)……又得看鏈接的返回值了(此處說(shuō)明,可以在控制臺(tái)點(diǎn)擊response標(biāo)簽查看返回值,你只要按↓鍵就OK了)。在漫長(zhǎng)的遍歷過(guò)程中,我注意到了一個(gè)鏈接的內(nèi)容十分不一樣的,不相同的,很多很多。直覺(jué)告訴我,就是這個(gè)鏈接了。

QQ音樂(lè)MP3下載


拿去做一下URL解碼后,咋一看一頭霧水。不信你看一下下?

QQ音樂(lè)MP3下載


接合歌曲鏈接,這個(gè)請(qǐng)求鏈接,搜索請(qǐng)求結(jié)果,這三個(gè)內(nèi)容。其實(shí)不難發(fā)現(xiàn),songmid 這個(gè)參數(shù)是關(guān)鍵。

QQ音樂(lè)MP3下載


QQ音樂(lè)MP3下載


所以,我們這個(gè)時(shí)候基本就以及厘清下載音樂(lè)的步驟以及思路了。首先,請(qǐng)求搜索某一首歌,然后或者到song mid 接著song mid 去請(qǐng)求服務(wù)器拿到這首歌的播放鏈接。接著用request請(qǐng)求數(shù)據(jù)回來(lái)再用二進(jìn)制保存就OK啦。

代碼寫起來(lái)

導(dǎo)入需要用到的json庫(kù)和requests庫(kù)。

構(gòu)造一個(gè)類,downloadMusic,初始化一個(gè)headers,做個(gè)最簡(jiǎn)單的反爬。

寫run方法,將上面的思路實(shí)現(xiàn)出來(lái)。請(qǐng)求回?cái)?shù)據(jù)后就用json.loads方法加載json數(shù)據(jù)。逐步逐步請(qǐng)求服務(wù)器,填充需要填的數(shù)據(jù)。

最后拿到鏈接的URL后,就easy了,用requests請(qǐng)求資源回來(lái)后。用.content,不要用.text。又人問(wèn)過(guò)我這兩個(gè)方法的區(qū)別。

簡(jiǎn)單來(lái)說(shuō),content拿到的數(shù)據(jù)是字節(jié),調(diào)試打印出來(lái)你會(huì)發(fā)現(xiàn)數(shù)據(jù)前面會(huì)有個(gè)b',text的話,就是一個(gè)字符串了。

因?yàn)槲覀円4娓枨?,就肯定要用字?jié)保存好,用wb方式打開(kāi),然后寫進(jìn)去后便關(guān)閉即可。代碼貼在下面。

至此寫完收工,可以美滋滋地下載我們要的歌了。有了它還怕什么鈴聲找不到自己喜歡的問(wèn)題嗎?

# -*- coding: utf-8 -*-
# @Time : 10/10/2018 9:31 PM
# @Author : MARX·CBR
# @File : __init__.py
import requests
import json
class downloadMusic:
def __init__(self):
self.headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
}
self.name='I Want My Tears Back'
def run(self,sn):
self.name=sn
session=requests.session()
firstjsonurl='https://c.y.qq.com/splcloud/fcgi-bin/smartbox_new.fcg?is_xml=0&format=jsonp&key={}&g_tk=5381&jsonpCallback=SmartboxKeysCallbackmod_top_search1467&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0'.format(self.name)
r=session.get(firstjsonurl).text
print(type(r))
print(r[39:-1:])
myjson=json.loads(r[39:-1:])
mid=myjson['data']['song']['itemlist'][0]['mid']
print(mid)
searchurl='''https://u.y.qq.com/cgi-bin/musicu.fcg?callback=getplaysongvkey2236996910208997&g_tk=5381&jsonpCallback=getplaysongvkey2236996910208997&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"8665097290","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"8665097290","songmid":["'''+mid+'''"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":20,"cv":0}}'''
r=session.get(searchurl).text
print(r)
songjson=json.loads(r[32:-1:])
print(songjson)
header=songjson['req_0']['data']['sip'][0]
two=songjson['req_0']['data']['midurlinfo'][0]['purl']
songurl=header+two
with open("{}.mp3".format(self.name),'wb') as ms:
print(songurl)
raw = session.get(songurl, headers=self.headers)
content=raw.content
if len(content) >500:
ms.write(content)
print("下載成功")
else:
print("下載失敗")
App=downloadMusic()
while 1:
songName=input("請(qǐng)輸入歌曲名字")
App.run(songName)

本文對(duì)你有沒(méi)幫助呀,喜歡的話,記得留言、點(diǎn)贊、轉(zhuǎn)發(fā)喲。謝謝各位!

歡迎各位關(guān)注我的微信公眾號(hào):敘之亭

QQ音樂(lè)MP3下載


大宁县| 黑龙江省| 晋江市| 仁寿县| 枞阳县| 贵德县| 九龙县| 鹤峰县| 蓬安县| 类乌齐县| 吉首市| 朔州市| 莱州市| 黔西县| 专栏| 子洲县| 灵石县| 图木舒克市| 肇庆市| 富平县| 昭苏县| 应城市| 余庆县| 穆棱市| 金塔县| 峡江县| 开平市| 敖汉旗| 哈密市| 胶南市| 安乡县| 察雅县| 汝阳县| 崇礼县| 怀宁县| 和静县| 黄骅市| 安国市| 鹤壁市| 河曲县| 焉耆|