最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python網(wǎng)絡(luò)爬蟲實現(xiàn)個性化音樂播放器示例解析

 更新時間:2022年03月14日 16:59:08   作者:館主阿牛  
這篇文章主要為大家介紹了使用python網(wǎng)絡(luò)爬蟲實現(xiàn)個性化音樂播放器的詳細示例代碼以及內(nèi)容解析,有需要的朋友?可以借鑒參考下希望能夠有所幫助

前言

當(dāng)前很多人在閑暇時喜歡聽音樂,那么基于這種現(xiàn)象,我也是肝了幾個小時完成了基于python的個性化音樂播放器,現(xiàn)在分享給你們。

開發(fā)組件

python3.5 以上版本就行
tkinter (python 自帶的用于圖形用戶界面開發(fā)的模塊)
requests(爬蟲模塊)
Chrome 瀏覽器
等等

功能

音樂下載器功能:

(1)、用戶輸入想要下載的歌曲或關(guān)鍵字名稱

(2)、程序獲取用戶所輸入的歌曲名稱關(guān)鍵字,根據(jù)該“關(guān)鍵字”向網(wǎng)站發(fā)起數(shù)據(jù)請求

(3)、程序根據(jù)返回的數(shù)據(jù)信息,進行分析后,呈現(xiàn)清單的形式給用戶

(4)、用戶點擊清單所顯示所顯示的相應(yīng)歌曲,點擊下載,便可下載該歌曲

流程分析

基于python的個性化音樂下載器模塊詳細

(一)前端模塊

# 創(chuàng)建窗口
window = tkinter.Tk()
#設(shè)置標(biāo)題
window.title('音樂下載器',)
#設(shè)置窗口大小及位置
window.geometry('900x460+500+100')
#標(biāo)簽組件
lab = Label(window,text='請輸入要下載的歌曲:',font=('華文行楷',15))
# #標(biāo)簽定位
lab.grid(row=0,column=0)
#輸入框組件
entry = Entry(window,font=('隸書',20),width=20)
entry.grid(row=0,column=1)
#搜索按鈕
btn = Button(window,text='搜索',font=('隸書',15),width=20,command=get_music_list)
btn.grid(row=0,column=2)
#列表框      #可以設(shè)置多選,selectmode=MULTIPLE
listbox = Listbox(window,font=('隸書',16),width=45,heigh=15)
listbox.grid(row=1,columnspan=2)
listbox_1 = Listbox(window,font=('隸書',16),width=35,heigh=15)
listbox_1.grid(row=1,column=2)
#下載按鈕
btn_1 = Button(window,text='開始下載',font=('隸書',15),command=get_music_url)
btn_1.grid(row=2,column=0)
#退出按鈕
btn_2 = Button(window,text='退出程序',font=('隸書',15),command=window.quit)
btn_2.grid(row=2,column=2)
# 消息循環(huán)顯示界面
window.mainloop()

代碼中的cammand用來綁定后端函數(shù)。
這一塊代碼用于實現(xiàn)可視化與用戶交互,這一塊我不多說,大家自行學(xué)習(xí)python 自帶的tkinter模塊就可以實現(xiàn),效果如圖所示

(二)后端模塊

1.分析

進入酷我音樂網(wǎng)站

我們先將這些歌曲名稱先爬取下來,然后添加到前端列表框中

具體函數(shù)如下

#獲取音樂搜索列表的函數(shù)
def get_music_list():
	#獲取前端搜索框中輸入的內(nèi)容
    name = entry.get()
    #下一次搜索的時候清空列表框用于顯示新的歌單
    listbox.delete(0, END)
    #循環(huán)加載三頁音樂
    for k in range(1,4):
        url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?'
        data = {
            'key': name,
            'pn': k,
            'rn': '30',
            'httpsStatus': '1',
            'reqId': '161cbd51-cde1-11eb-bf58-bba623268fbb'
            }
        response = requests.get(url=url,headers=headers,params=data,proxies=proxy).text
        dic_data = json.loads(response)
        list_data = dic_data['data']['list']
        #listbox.delete(0,END)
        for i in list_data:
            music_name = i['name']+'-'+i['artist']
            #在列表框中插入音樂名稱
            listbox.insert(END, music_name)
            music_id = i['rid']
            list_1.append(music_id)

至此,音樂列表就添加到了列表框,注意我們將所有音樂的rid添加到了list_1的列表中,每個rid的索引跟列表框中的音樂名稱索引是相對應(yīng)的,這是實現(xiàn)點擊相應(yīng)歌曲下載的關(guān)鍵。然后我們需要實現(xiàn)點擊下載的功能。

具體函數(shù)如下

#解析音樂url的函數(shù)
def get_music_url():
    index = listbox.curselection()   #返回選取的索引,是一個元組
    for i in index:
        music_name = listbox.get(i)
        listbox_1.insert(END, music_name + ' 開始下載')
        url = 'http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1616159211200&httpsStatus=1&reqId=f8586c01-88b3-11eb-b442-d7b57b6d2564'.format(list_1[i])
        music_data = requests.get(url=url,headers=headers,proxies=proxy).text
        #print(music_data)
        e = '{"code": 200, "msg": "success", "url": "(.*?)"}'
        music_url = re.findall(e, music_data, re.S)[0]
        #print(music_url)
        download_music(music_url,music_name)

最后下載保存。

具體函數(shù)如下

#在當(dāng)前目錄創(chuàng)建文件夾,用于存放下載的音樂
if not os.path.exists('酷我音樂'):
    os.mkdir('酷我音樂')
#下載音樂并且保存的函數(shù)
def download_music(url,music_name):
    music_name = music_name+".mp3"
    music = requests.get(url=url,proxies=proxy).content
    path = '酷我音樂/' + music_name
    with open(path, 'wb') as fp:
        fp.write(music)
    listbox_1.insert(END, music_name+' 下載完成!')

同時,我們在用python寫爬蟲時會被反爬,下列代碼為反反爬措施

#ip代理池
ip = ['{"HTTP":"175.42.129.105"}','{"HTTP":"121.232.148.97"}','{"HTTP":"121.232.148.72"}']
proxy = random.choice(ip)
proxy = json.loads(proxy)
#反反爬headers
headers = {
    'User - Agent': 'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4430.85Safari/537.36',
    'Referer': 'http://www.kuwo.cn/search/list?key=%E7%83%AD%E7%88%B1105%C2%B0C%E7%9A%84%E4%BD%A0',
    'csrf': '0BXQD7I99LN',
    'Cookie': '',
}

這里的cookie是保持你的登錄狀態(tài)的,相當(dāng)于驗證你的身份,寫上你自己的即可。

這里的csrf與cookie寫你自己的就行,源代碼中我會空著,注意修改。還有,復(fù)制cookie之前先在網(wǎng)站登錄,cookie會

記錄你的登錄狀態(tài),不登錄不行哦

這里的cookie和csrf在第一次請求的header中,如下圖

源代碼

代碼在這,拿走不謝~~~

import requests
import random
import json
import re
import os
import tkinter
from tkinter import *
list_1 = []    #放置音樂rid的列表
#ip代理池
ip = ['{"HTTP":"175.42.129.105"}','{"HTTP":"121.232.148.97"}','{"HTTP":"121.232.148.72"}']
proxy = random.choice(ip)
proxy = json.loads(proxy)
#反反爬headers
headers = {
    'User - Agent': 'Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/90.0.4430.85Safari/537.36',
    'Referer': 'http://www.kuwo.cn/search/list?key=%E7%83%AD%E7%88%B1105%C2%B0C%E7%9A%84%E4%BD%A0',
    'csrf': '', #填你的
    'Cookie': '',  #填你的
}
#在當(dāng)前目錄創(chuàng)建文件夾,用于存放下載的音樂
if not os.path.exists('酷我音樂'):
    os.mkdir('酷我音樂')
#下載音樂并且保存的函數(shù)
def download_music(url,music_name):
    music_name = music_name+".mp3"
    music = requests.get(url=url,proxies=proxy).content
    path = '酷我音樂/' + music_name
    with open(path, 'wb') as fp:
        fp.write(music)
    listbox_1.insert(END, music_name+' 下載完成!')
#解析音樂url的函數(shù)
def get_music_url():
    index = listbox.curselection()   #返回選取的索引,是一個元組
    for i in index:
        music_name = listbox.get(i)
        listbox_1.insert(END, music_name + ' 開始下載')
        url = 'http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1616159211200&httpsStatus=1&reqId=f8586c01-88b3-11eb-b442-d7b57b6d2564'.format(list_1[i])
        music_data = requests.get(url=url,headers=headers,proxies=proxy).text
        #print(music_data)
        e = '{"code": 200, "msg": "success", "url": "(.*?)"}'
        music_url = re.findall(e, music_data, re.S)[0]
        #print(music_url)
        download_music(music_url,music_name)
#獲取音樂搜索列表的函數(shù)
def get_music_list():
    name = entry.get()
    listbox.delete(0, END)
    #循環(huán)表示加載三頁音樂
    for k in range(1,4):
        url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?'
        data = {
            'key': name,
            'pn': k,
            'rn': '30',
            'httpsStatus': '1',
            'reqId': '161cbd51-cde1-11eb-bf58-bba623268fbb'
            }
        response = requests.get(url=url,headers=headers,params=data,proxies=proxy).text
        dic_data = json.loads(response)
        list_data = dic_data['data']['list']
        #listbox.delete(0,END)
        for i in list_data:
            music_name = i['name']+'-'+i['artist']
            listbox.insert(END, music_name)
            music_id = i['rid']
            list_1.append(music_id)
# 創(chuàng)建窗口
window = tkinter.Tk()
#設(shè)置標(biāo)題
window.title('音樂下載器',)
#設(shè)置窗口大小及位置
window.geometry('900x460+500+100')
#標(biāo)簽組件
lab = Label(window,text='請輸入要下載的歌曲:',font=('華文行楷',15))
# #標(biāo)簽定位
lab.grid(row=0,column=0)
#輸入框組件
entry = Entry(window,font=('隸書',20),width=20)
entry.grid(row=0,column=1)
#搜索按鈕
btn = Button(window,text='搜索',font=('隸書',15),width=20,command=get_music_list)
btn.grid(row=0,column=2)
#列表框      #可以設(shè)置多選,selectmode=MULTIPLE
listbox = Listbox(window,font=('隸書',16),width=45,heigh=15)
listbox.grid(row=1,columnspan=2)
listbox_1 = Listbox(window,font=('隸書',16),width=35,heigh=15)
listbox_1.grid(row=1,column=2)
#下載按鈕
btn_1 = Button(window,text='開始下載',font=('隸書',15),command=get_music_url)
btn_1.grid(row=2,column=0)
#退出按鈕
btn_2 = Button(window,text='退出程序',font=('隸書',15),command=window.quit)
btn_2.grid(row=2,column=2)
# 消息循環(huán)顯示界面
window.mainloop()

效果圖

看了圖,是不是感覺很nice!

以上就是python網(wǎng)絡(luò)爬蟲實現(xiàn)個性化音樂播放器示例解析的詳細內(nèi)容,更多關(guān)于python實現(xiàn)音樂播放器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python調(diào)用C/C++的方法解析

    Python調(diào)用C/C++的方法解析

    這篇文章主要介紹了Python調(diào)用C/C++的方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • json 轉(zhuǎn) mot17數(shù)據(jù)格式的實現(xiàn)代碼 (親測有效)

    json 轉(zhuǎn) mot17數(shù)據(jù)格式的實現(xiàn)代碼 (親測有效)

    這篇文章主要介紹了json 轉(zhuǎn) mot17數(shù)據(jù)格式的實現(xiàn)代碼 (親測有效),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 使用BeeWare實現(xiàn)iOS調(diào)用Python方式

    使用BeeWare實現(xiàn)iOS調(diào)用Python方式

    這篇文章主要介紹了使用BeeWare實現(xiàn)iOS調(diào)用Python方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • OpenCV實戰(zhàn)之OpenCV中的顏色空間

    OpenCV實戰(zhàn)之OpenCV中的顏色空間

    這篇文章主要介紹了OpenCV實戰(zhàn)之OpenCV中的顏色空間,解計算機視覺中常用的色彩空間,并將其用于基于顏色分割。我們還將用C?++和Python共享演示代碼,下文詳細內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Python Flask框架模塊安裝級使用介紹

    Python Flask框架模塊安裝級使用介紹

    這篇文章主要為大家介紹了Python Flask框架模塊安裝級使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python字符串操作詳析

    python字符串操作詳析

    這篇文章主要介紹了python字符串操作,字符串是不可變類型可以重新賦值,但不可以索引改變其中一個值,只能拼接字符串建立新變量,下面來了解具體內(nèi)容吧,需要的小伙伴可以參考一下
    2022-02-02
  • Python變量名詳細規(guī)則詳細變量值介紹

    Python變量名詳細規(guī)則詳細變量值介紹

    這篇文章主要介紹了Python變量名詳細規(guī)則詳細變量值,Python需要使用標(biāo)識符給變量命名,其實標(biāo)識符就是用于給程序中變量、類、方法命名的符號(簡單來說,標(biāo)識符就是合法的名稱,下面葛小編一起進入文章里哦阿姐更多詳細內(nèi)容吧
    2022-01-01
  • Django中文件上傳和文件訪問微項目的方法

    Django中文件上傳和文件訪問微項目的方法

    這篇文章主要介紹了Django中文件上傳和文件訪問微項目的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • pytorch  RNN參數(shù)詳解(最新)

    pytorch  RNN參數(shù)詳解(最新)

    這篇文章主要介紹了pytorch  RNN參數(shù)詳解,這個示例代碼展示了如何使用 PyTorch 定義和訓(xùn)練一個 LSTM 模型,并詳細解釋了每個類和方法的參數(shù)及其作用,需要的朋友可以參考下
    2024-06-06
  • 打開并讀取npy文件,查看文件內(nèi)容方式

    打開并讀取npy文件,查看文件內(nèi)容方式

    這篇文章主要介紹了打開并讀取npy文件,查看文件內(nèi)容方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論

阿荣旗| 依安县| 乌鲁木齐县| 松江区| 长沙县| 海盐县| 建德市| 聊城市| 鄂尔多斯市| 利津县| 历史| 龙南县| 克山县| 谷城县| 天祝| 麻江县| 安溪县| 平远县| 海淀区| 铜山县| 大冶市| 黑龙江省| 阳东县| 耿马| 临沂市| 仁化县| 江西省| 武宣县| 永川市| 康保县| 调兵山市| 吴川市| 安仁县| 平谷区| 清远市| 霍林郭勒市| 克什克腾旗| 星子县| 闸北区| 平湖市| 洛浦县|