爬虫爬取下载qq音乐,又跟新的风口相关?(附源码和资料)
↑?點擊上方?“一行數據”?關注 + 星標?~?
每周送書,絕不錯過
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=%E6%9C%80%E7%BE%8E%E7%9A%84%E6%9C%9F%E5%BE%85&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?parsew=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?sysdef?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?+?purltry: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編程資料哦
無論做什么,積累才是王道
祝三連的讀者今年能再暴富一次!!!!!
總結
以上是生活随笔為你收集整理的爬虫爬取下载qq音乐,又跟新的风口相关?(附源码和资料)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文让你了解RT-Thread
- 下一篇: 为什么一个字节定义成8位?