想下載什么資源,直接用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]}, 下載完成!')

 

兄弟們,快去試試吧~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM