想下載什麼資源,直接用python寫爬蟲指令碼,想要什麼分分鐘就爬到了
阿新 • • 發佈:2022-03-04
我們聽歌什麼的,現在這限制那限制,要不只能在這個平臺 ,要不就只能在那個平臺,多麻煩,咱們直接用程式碼全部下載下來用本地播放器播放,美滋滋!
文章目錄
一、準備
這裡咱們用python和pycharm就好了,沒有安裝的小夥伴可以先安裝一下。
這兩個模組也需要安裝一下
requests
prettytable
開啟cmd輸入(pip install 加上模組名)回車等待即可,第二個也一樣的。
二、流程思路
本次主要實現
- 搜尋功能
- 下載歌曲功能
搜尋功能
- 傳送請求 向以前的搜尋功能介面傳送 請求
- 獲取資料 獲取所有歌曲資訊資料
- 解析資料 歌曲 歌手名 專輯 歌曲mid(用來下載歌曲必須要的引數)
- 格式化輸出
下載歌曲功能
- 通過獲取的歌曲mid 拼接 需要的音樂url
- 傳送網路請求 需要的音樂url
- 獲取資料 獲取 裡面生成的 部分音樂連結 合併 (mp3 資料所在的連結了)
- 傳送請求 (mp3 資料所在的連結了)
- 獲取資料 音樂二進位制資料
- 儲存資料
三、程式碼部分
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]}, 下載完成!')
兄弟們,快去試試吧~