爬蟲爬取下載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&notice=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&notice=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&notice=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&notice=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編程資料哦

無論做什麼,積累纔是王道

祝三連的讀者今年能再暴富一次!!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章