1. 程式人生 > 其它 >想下載什麼資源,直接用python寫爬蟲指令碼,想要什麼分分鐘就爬到了

想下載什麼資源,直接用python寫爬蟲指令碼,想要什麼分分鐘就爬到了

我們聽歌什麼的,現在這限制那限制,要不只能在這個平臺 ,要不就只能在那個平臺,多麻煩,咱們直接用程式碼全部下載下來用本地播放器播放,美滋滋!

文章目錄

一、準備

這裡咱們用python和pycharm就好了,沒有安裝的小夥伴可以先安裝一下。

這兩個模組也需要安裝一下

requests 
prettytable 

開啟cmd輸入(pip install 加上模組名)回車等待即可,第二個也一樣的。

二、流程思路

本次主要實現

  1. 搜尋功能
  2. 下載歌曲功能

搜尋功能

  1. 傳送請求 向以前的搜尋功能介面傳送 請求
  2. 獲取資料 獲取所有歌曲資訊資料
  3. 解析資料 歌曲 歌手名 專輯 歌曲mid(用來下載歌曲必須要的引數)
  4. 格式化輸出

下載歌曲功能

  1. 通過獲取的歌曲mid 拼接 需要的音樂url
  2. 傳送網路請求 需要的音樂url
  3. 獲取資料 獲取 裡面生成的 部分音樂連結 合併 (mp3 資料所在的連結了)
  4. 傳送請求 (mp3 資料所在的連結了)
  5. 獲取資料 音樂二進位制資料
  6. 儲存資料

三、程式碼部分

import requests     # 傳送網路請求
import json    
import prettytable as pt
# Python學習交流群:924040232


headers 
= { 'cookie': 'pgv_pvid=7300130020; tvfe_boss_uuid=242c5295a1cb156d; RK=6izJ0rkfNn; ptcz=622f5bd082de70e3e6e9a077923b48f72600cafd5e4b1e585e5f418570fa30fe; ptui_loginuin=1321228067; luin=o3452264669; o_cookie=3452264669; ts_uid=5501087131; fqm_pvqid=89ea2cc7-6806-4091-989f-5bc2f2cdea5c; lskey=00010000d96bdb23303bc141246a5c2f9a02cf45acf079eaab6645fdc10923e7a0eaac09aa24533ab1299555; fqm_sessionid=d77623f3-4dd0-4709-8e50-a34986b17344; pgv_info=ssid=s4530794666; ts_last=y.qq.com/; ts_refer=ADTAGmyqq; _qpsvr_localtk=0.8458135546904957; euin=oK6kowEAoK4z7eclow6qoiSz7z**; psrf_qqrefresh_token=; psrf_qqaccess_token=; wxuin=1152921504872193707; psrf_qqopenid=; wxrefresh_token=53_FHlMDgGCCfOUCXRxCMGFGYHxwtDV0_rZANu84l_KrYtPYRVSWqpxoWqojdj1coj4CF_H4qNrXw0WrZtQdlsozcwYQbVp0SepI9Jmm_Pfhjk; qqmusic_key=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; qm_keyst=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; psrf_qqunionid=; tmeLoginType=1; wxunionid=oqFLxsgDOwYRnPDffuK5UINv958c; wxopenid=opCFJw5Vvcf24VLQSyNpKAX6gt3I; wxuin=1152921504872193707; qm_keyst=W_X_3mJrl760n0lDWkgqqBhBMX2VPnH1PNwwUZjvNkmSnurNjTTap1J6gjetIU50hraK3AjHgw5T4ay2R3; login_type=2
' } name = input('請輸入你想要下載的歌曲或者歌手名稱:') # 1. 傳送請求 向以前的搜尋功能介面傳送 請求 url = f'https://c.***/soso/fcgi-bin/client_search_cp?p=1&n=10&w={name}' response = requests.get(url) # print(response) # 2. 獲取資料 獲取所有歌曲資訊資料 json_str = response.text # 3. 解析資料 歌曲 歌手名 專輯 歌曲mid(用來下載歌曲必須要的引數) json_str = json_str[9: -1] json_dict = json.loads(json_str) song_list = json_dict['data']['song']['list'] tb = pt.PrettyTable() tb.field_names = ['序號', '歌名', '歌手', '專輯'] music_info_list = [] count = 0 # 4. 格式化輸出 for song in song_list: songname = song['songname'] songmid = song['songmid'] singer = song['singer'][0]['name'] albumname = song['albumname'] tb.add_row([count, songname, singer, albumname]) music_info_list.append([songmid, songname, singer]) count += 1 print(tb) while True: input_index = eval(input('請輸入你要下載的歌曲序號(-1)退出:')) if input_index == -1: break download_info = music_info_list[input_index] songmid = download_info[0] # 1. 通過獲取的歌曲mid 拼接 需要的音樂url music_info_url = 'https://u.***/cgi-bin/musicu.fcg?data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch", "filename":"M800","param":{"guid":"8846039534","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","filename":"M800","param":{"guid":"8846039534","songmid":["%s"],"songtype":[0],"uin":"1152921504784213523","loginflag":1,"platform":"20"}},"comm":{"uin":"1152921504784213523","format":"json","ct":24,"cv":0}}' % songmid # print(music_info_url) # 2. 傳送網路請求 需要的音樂url json_data = requests.get(url=music_info_url, headers=headers).json() # 3. 獲取資料 獲取 裡面生成的 部分音樂連結 合併 (mp3 資料所在的連結了) purl = json_data['req_0']['data']['midurlinfo'][0]['purl'] media_url = 'https://dl.stream.qqmusic.qq.com/' + purl # 4. 傳送請求 (mp3 資料所在的連結了) # 5. 獲取資料 音樂二進位制資料 music_data = requests.get(media_url).content # 6. 儲存資料 with open(f'歌曲下載/{download_info[1]}-{download_info[2]}.mp3', mode='wb') as f: f.write(music_data) print(f'{download_info[1]}, 下載完成!')

兄弟們,快去試試吧~