Python爬蟲下載酷狗音樂


1、Python下載酷狗音樂

1.1、前期准備

要有rquests、re、json包,如果不存在,先用pip install安裝

1.2、分析

1.2.1、第一步

首先我們先進入首頁並搜索你要查詢的歌手,進入查詢的頁面,查看頁面源代碼,發現並沒有這個列表數據,這里就不展示了,頁面源代碼沒有發現想要的數據,那就來看network網絡請求中的數據

1.2.2、第二步

打開網絡請求,刷新頁面,找到需要的請求
網絡請求
打開標頭查看url中攜帶的數據
攜帶的參數
通過查看參數可知,不僅僅存在着我們搜索的內容,還有兩個其它的參數callback_ 兩個參數,這乍一看還挺懵的,想着是不是有什么腳本進行了加密什么的,后面通過測試,發現這兩給參數是一個隨機給出的隨機值,將這兩個參數固定修改搜索的歌手,發現能夠查詢到我們需要的內容。所有接下來可以進行我們的第三步

1.2.3、第三步

隨便點擊一首歌曲,進入聽歌頁面,發現還是老套路,在頁面源代碼中沒有發現需要的MP3音樂文件,所有又需要看network網絡請求中的數據
音樂請求
打開標頭查看url中攜帶的數據

url
查看攜帶的參數,發現有很多,不過沒事,通過分析可以發現只有hashalbum_id是變值,其它的都是跟第二步中的callback_ 這個參數一樣,是可以固定下來的,我們只需關心hashalbum_id這兩個參數

通過分析可以知道,第二步中的請求中有我們需要的這兩個參數,如下
兩個參數
找到了要下載音樂的所有需要的東西,接下來可以進行我們的第四步

1.2.4、第四步

訪問找的兩個求,查看返回的數據信息

第二步的請求

song
hash
通過分析發現hashalbum_id這兩個參數存在song中所有我們需要將這個song給取出來

第三步的請求
mp3
通過分析發現mp3文件在data中,所有需要將data提取出來

至此所有的分析都完成了,可以直接上代碼了

1.3、代碼實現

import requests
import json
import re

url = "https://searchrecommend.kugou.com/get/complex?callback=jQuery112409589811716312686_1626852436130&word=周傑倫&_=1626852436132"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70",
    "referer": "https://www.kugou.com/"
}
resp = requests.get(url, headers=headers)
p1 = re.compile(r'jQuery.*?[({].*?"data":.*?"song":(.*?),"correctiontip"', re.S)
songs = re.findall(p1, resp.text)[0]
songs = json.loads(songs)

for song in songs:
    title = song['songname']
    AlbumID = song['AlbumID']
    song_hash = song['hash']
    child_url = f"https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery191053318263960215_1626866592344&hash={song_hash}&dfid=1tXkst0i97Rq4RW0pz15GjrP&mid=3196606d7d3ff0207a473da58e0b44b3&platid=4&album_id={AlbumID}&_=1626866592346"
    child_resp = requests.get(child_url, headers=headers)
    child_resp.encoding="utf-8"
    obj = re.compile(r'jQuery.*?[({].*?"data":(.*?)}[)]', re.S)
    child_song = re.findall(obj, child_resp.text)[0]
    child_song = child_song.replace("\\", "")
    child_song_src = json.loads(child_song)["play_url"]
    child_song_resp = requests.get(child_song_src)
    with open("音樂/"+title+".mp3", mode="wb") as f:
        f.write(child_song_resp.content)
    print(title+"下載完成!!!")
print("okok")

1.4、運行結果

下載周傑倫的歌,改變url去查詢你喜歡的歌手
歌曲
因為網頁版只有20首歌,所以就只有這么多

在本地文件中查看

磁盤
測試完成,歌曲下載成功


免責聲明!

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



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