日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python爬取收费音乐_想下载的歌曲太多?嫌麻烦?要付费?戳这,帮你解决---Python爬取酷狗音乐...

發(fā)布時(shí)間:2023/12/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬取收费音乐_想下载的歌曲太多?嫌麻烦?要付费?戳这,帮你解决---Python爬取酷狗音乐... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄1.前言

2.分析一下1.

2.

3.

3.代碼解釋

4.完整代碼

5.結(jié)語(yǔ)

1.前言

前面發(fā)布了一篇關(guān)于QQ音樂(lè)爬取的教程,但對(duì)于我們這種文藝青年來(lái)說(shuō),一個(gè)平臺(tái)的歌曲怎么夠我們聽(tīng)的,也是因?yàn)槊總€(gè)平臺(tái)歌曲的權(quán)限不同,所以不同平臺(tái)也有不同的歌曲,今天,給大家?guī)?lái)爬取酷狗音樂(lè)的教程,就是歌多!!!

2.分析一下

我們大家聽(tīng)歌的時(shí)候大都是去搜喜歡的歌曲名或者是喜歡的歌手,那今天我們就以歌手為例,下載搜索歌手出現(xiàn)的歌曲列表,如下。

我們就是要下載列表中的全部歌曲。

1.

首先我們分析一下,我們執(zhí)行代碼時(shí),改變的肯定是歌手名,就是當(dāng)我們輸入歌手的名字時(shí),它會(huì)獲取到有關(guān)這個(gè)列表的所有歌曲的信息,所以我們要從搜索部分入手。

如圖:當(dāng)我們?cè)谒阉骺蜉斎胄畔r(shí),每按一次鍵盤就會(huì)出現(xiàn)一個(gè)文件,當(dāng)我們搜索完,按回車時(shí),會(huì)發(fā)現(xiàn)一個(gè)文件,這個(gè)文件包含了這個(gè)列表的所有信息,也就是所搜索歌手的全部歌曲,而且每一項(xiàng)都包含了這首歌曲的詳細(xì)信息,但遺憾的是沒(méi)有這首歌曲的播放地址,沒(méi)關(guān)系,至少我們的方向是對(duì)的。

我們分析這個(gè)文件的地址:

https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=%E6%B1%AA%E8%8B%8F%E6%B3%B7&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073826

這應(yīng)該是經(jīng)過(guò)地址編碼的,我們轉(zhuǎn)碼看一下:

https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=汪蘇瀧&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073826

看到變化了嗎,沒(méi)錯(cuò),關(guān)鍵字"keyword"就是歌手名,我們改變地址中的keyword就可以得到,不同歌手的歌曲列表

2.

既然我們找到了歌曲的詳細(xì)信息,就要分析信息中哪些是我們想要的,但在此之前,我們得找到歌曲的其他信息,不然一處信息是無(wú)法判斷的。我們點(diǎn)開(kāi)一首歌曲,檢查一下,我們可以看到這樣一個(gè)文件。

這個(gè)文件包也是包含了歌曲的詳細(xì)信息,但重要的是,有一個(gè)可疑的地址,我們點(diǎn)開(kāi)來(lái)看,猜對(duì)了,就是歌曲的播放地址,哈哈,是不是信心大增。

3.

如果只看播放地址的話我們發(fā)現(xiàn)不了什么規(guī)律,那我們看一看這個(gè)文件的地址,多看幾個(gè),沒(méi)準(zhǔn)你會(huì)有新的發(fā)現(xiàn)。

仔細(xì)看一看,發(fā)沒(méi)發(fā)現(xiàn)兩個(gè)關(guān)鍵字,“hash"和"album_id”,是不是覺(jué)得和我們前面發(fā)現(xiàn)的信息有聯(lián)系啊,沒(méi)錯(cuò),我們最開(kāi)始分析的那個(gè)文件中,歌曲的詳細(xì)信息里就包含了這兩個(gè)關(guān)鍵字的值。

所以獲取歌曲播放地址的步驟我們大致也明白了,我們可以根據(jù)我們分析的第一個(gè)文件中的"hash"和"album_id"來(lái)獲取我們分析的第二個(gè)文件的地址,第二個(gè)文件包含了歌曲的播放地址,所以,好吧,圖解一下。

這下應(yīng)該很非常清楚了吧,光看圖也該明白了吧!!!

3.代碼解釋

再給你們稍微說(shuō)明一下。

我們根據(jù)歌手搜索時(shí),參數(shù)歌手名是字符串類型,但帶到地址中要進(jìn)行編碼轉(zhuǎn)換。

調(diào)入模塊:

import urllib.request,urllib.error,urllib.parse

代碼部分:

code_name = urllib.parse.quote(name) #字符串轉(zhuǎn)化為編碼格式

獲取歌手的歌曲列表,這是圖解的第一步,注釋部分是根據(jù)搜索的歌名獲取歌曲列表,也就是一首歌曲的不同演唱版本,使用時(shí)只需要將上面的地址注釋就可以了

代碼:

music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073804" % code_name #獲取歌名產(chǎn)生的歌曲列表 下載列表全部

# music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112406527023765769748_1588091726282&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588091726284" % code_name #搜索歌手產(chǎn)生的歌曲列表 下載列表全部

獲取帶有歌曲播放地址的文件的地址,這是圖解的第三步:

代碼:

information_url = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19101144344902676131_1588093696865&hash={}&album_id={}&dfid=2AHvg428HZSx0oRNWX0prTMo&mid=4b42424f9fa4d173c4601c6b476003f2&platid=4&_=1588093696867".format(music_hash,music_albumid)

獲取歌曲的播放地址,這是圖解的最后一步:

代碼:

music_url = cut_dict["data"]["play_url"]

分析一下的目的就是讓你們?cè)诳赐暾a的時(shí)候沒(méi)有那么懵,結(jié)合我們分析的步驟,和每段代碼的作用,完整看一遍代碼,很容易理解。

4.完整代碼

import requests

import re

import json

import os

import urllib.request,urllib.error,urllib.parse

import time

headers = {"cookie": "kg_mid=4b42424f9fa4d173c4601c6b476003f2; kg_dfid=2AHvg428HZSx0oRNWX0prTMo; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1587913892,1588084386; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; kg_mid_temp=4b42424f9fa4d173c4601c6b476003f2; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1588093697",

"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}

content_url_list = []

def get_url(name):

code_name = urllib.parse.quote(name) #字符串轉(zhuǎn)化為編碼格式

music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112405886208845288214_1588464073802&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588464073804" % code_name #獲取歌名產(chǎn)生的歌曲列表 下載列表全部

# music_list = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112406527023765769748_1588091726282&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1588091726284" % code_name #搜索歌手產(chǎn)生的歌曲列表 下載列表全部

music_list_response = requests.get(music_list,headers=headers,).text

music_list_html = re.findall(r'\((.*)\)',music_list_response)[0]

music_list_html_dict = json.loads(music_list_html)

for i in range(len(music_list_html_dict["data"]["lists"])):

music_hash = music_list_html_dict["data"]["lists"][i]["FileHash"] #關(guān)鍵字 hash

music_albumid = music_list_html_dict["data"]["lists"][i]["AlbumID"] #關(guān)鍵字album_id

information_url = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19101144344902676131_1588093696865&hash={}&album_id={}&dfid=2AHvg428HZSx0oRNWX0prTMo&mid=4b42424f9fa4d173c4601c6b476003f2&platid=4&_=1588093696867".format(music_hash,music_albumid)

content_url_list.append(information_url) #包含歌曲詳細(xì)信息

return content_url_list

def Preservation(sid):

url = sid

response = requests.get(url,headers=headers).text

time.sleep(3) #時(shí)間延遲 控制爬蟲爬取速度

cut_json = re.findall(r'\((.*)\)',response)[0] #格式為json格式

cut_dict = json.loads(cut_json) #轉(zhuǎn)換為字典格式 才能根據(jù)鍵獲取值

music_url = cut_dict["data"]["play_url"] #歌曲播放地址

music_name = cut_dict["data"]["song_name"] #歌曲名

singer = cut_dict["data"]["author_name"] #歌手名

data_url = "D:/Pycharm文件/網(wǎng)絡(luò)爬蟲/酷狗音樂(lè)/"

data_name = data_url + music_name + "_____" + singer + ".mp3"

content_url = requests.get(music_url,headers=headers).content

try:

if not os.path.exists(data_url): #判斷有誤文件夾

os.mkdir(data_url)

if not os.path.exists(data_name): #判斷有無(wú)文件

print("正在下載 %s" % (music_name + "---" + singer))

with open(data_name,"wb") as f:

f.write(content_url)

print(" %s 下載成功" % (music_name + "---" + singer))

else:

print("文件已存在")

except:

print("下載失敗")

for sid in get_url("不分手的戀愛(ài)"): # 當(dāng)沒(méi)有版權(quán)時(shí)是沒(méi)有play_url的 這部分要修改

Preservation(sid)

time.sleep(2) #時(shí)間延遲 控制爬蟲訪問(wèn)服務(wù)器時(shí)間 避免過(guò)快被反爬

5.結(jié)語(yǔ)

這次,我感覺(jué)寫的挺詳細(xì)了,當(dāng)然只是我自己覺(jué)得(嘻嘻),有什么意見(jiàn)或建議都可以私信我,我會(huì)努力改正,代碼有不足的地方還請(qǐng)指點(diǎn),我也會(huì)努力改正,我們一起加油呀。對(duì)了,別忘了多多支持我呀(嘻嘻)。

總結(jié)

以上是生活随笔為你收集整理的python爬取收费音乐_想下载的歌曲太多?嫌麻烦?要付费?戳这,帮你解决---Python爬取酷狗音乐...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。