簡單爬蟲下載QQ音樂

環境:python3.6
需要用到的庫:requests;json;os;multiprocessing
通過使用開發者工具進行比較查看確定需要用到的三個URL

u3 = "https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=63514736641951294&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E5%88%98%E5%BE%B7%E5%8D%8E&g_tk=5381&jsonpCallback=searchCallbacksong1651&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0"#取得media_mid

w字段為我們搜索的關鍵字

u2 = "https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback3987557968181119&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback3987557968181119&uin=0&songmid=002Q4Jgw0dxWxt&filename=C400002Q4Jgw0dxWxt.m4a&guid=5939185138"#返回songmid和vkey

需要取得u2需要有songmid和filename

u1 = "dl.stream.qqmusic.qq.com/C400002Q4Jgw0dxWxt.m4a?vkey=2B7DD0E2584277EE4C9839F48E3F92F573E443960895BCF8CB107114E2753A49FDE61425996E1F984CD7C4970738AA3A878B1CF0D14501D0&guid=5939185138&uin=0&fromtag=66"#通過filename和vkey=確定歌曲鏈接

具體代碼為:
"""
import requests
import random
import re
import json
import os
import multiprocessing

class DownLoadMusic(object):

def __init__(self, singer_name):
    self.singer_name = singer_name

def make_directory(self):
    folder_path ='F:\\test_auto\\spider\\music\\%s' % self.singer_name
    os.makedirs(folder_path)
    return folder_path

def get_mid_by_name(self):#通過歌手名字取得mid
    name = self.singer_name
    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=63514736641951294&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%s&jsonpCallback=searchCallbacksong1651&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0"%name
    response = requests.get(url)
    result_ = response.content
    result = result_.decode('utf-8')
    list_ = re.findall(r'\{(.*)\}', result, re.S)[0]
    result = re.findall(r'\{.*\}', list_, re.S)[0]
    #"file":{"media_mid":"002Q4Jgw0dxWxt","size_128":4177629,"size_320":10418855,"size_aac":6075090,"size_ape":25501357,"size_dts":0,"size_flac":26906455,"size_ogg":5951775,"size_try":0,"strMediaMid":"002Q4Jgw0dxWxt","try_begin":0,"try_end":0}
    result1 = re.findall(r'\"file.*?\}', result, re.S)
    mids = []
    for i in result1:
        mm = re.findall(r'\{.*\}', i, re.S)[0]
        x = json.loads(mm)
        mids.append(x['strMediaMid'])
    return mids

def get_music_by_mid(self, mid_):
    try:
        folder_path = self.make_directory()
    except:
        folder_path ='F:\\test_auto\\spider\\music\\%s' % self.singer_name
    filename = u'C400'+mid_+u'.m4a'
    url = "https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback3987557968181119&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback3987557968181119&uin=0&songmid=%s&filename=%s&guid=5939185138"%(mid_, filename)
    response = requests.get(url)
    result_ = response.content
    result = result_.decode('utf-8')
    x = re.findall(r'\[.*?\]', result, re.S)[0]
    y = re.findall(r'\{.*?\}', x, re.S)[0]#正則表達式取得報文
    z = json.loads(y)#轉化成字典
    vkey = z['vkey']
    uz = "http://dl.stream.qqmusic.qq.com/%s?vkey=%s&guid=5939185138&uin=0&fromtag=66" % (filename, vkey)
    try:
        response = requests.get(uz)
        result = response.content
    except:
        print("地址或者網絡有點問題...")
    else:
        name = str(random.randint(1000, 9999))+'.m4a'
        file_path = folder_path + '\\' + name
        print("正在下載歌曲%s" % name)
        with open(file_path, 'wb') as f:
            f.write(result)

'''
‘’‘’
def main():
singer_name = input('請輸入歌手名稱:')
download = DownLoadMusic(singer_name)#多進程下載英語
mids = download.get_mid_by_name()
p = multiprocessing.Pool(4)
p.map(download.get_music_by_mid, mids)
p.close()
p.join()

if name == 'main':
main()
'''

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容

  • 腦海一直有個想法,想做一個音樂播放的小程序。奈何還只停留在腦海之中。音樂的數據的來源是個需要考慮的問題。之前用No...
    Evtion閱讀 6,073評論 2 6
  • 利用perl語言抓取腳本的時候,我是拒絕的。因為用perl語言太繁瑣。空閑時間在聽音樂,突然發現有些歌沒辦法聽,就...
    自閉癥小孩閱讀 554評論 0 1
  • 1、任務目標①爬五月天正規專輯的所有歌曲的歌詞②按照年份進行情感分析,并制作詞云2、方法在qq音樂上用Python...
    FancyFanyc閱讀 9,241評論 0 5
  • 基于thinkphp的代碼 1:搜索歌曲 接口: $url="http://soso.music.qq.com/f...
    暖暖的走閱讀 1,032評論 0 0
  • 姓名:莫夏連 日期:2018年7月3日 名稱:寧波三維電子 六項精進403期努力三組學員 【日精進打卡第23天】 ...
    莫夏連閱讀 76評論 0 0