爬取网易云VIP音乐

左心房为你撑大大i 提交于 2019-12-29 14:49:55
from tkinter import  *
from  urllib.request import urlretrieve
from time import sleep
from selenium import webdriver
import os



def song_load(item):
    song_id = item['song_id']
    #print(song_id)
    song_name = item['somg_name']
    #print(song_name)
    song_url ="https://music.163.com/song/media/outer/url?id={}.mp3".format(song_id)
    print('下载链接是:',song_url)
    # 创建文件夹
    os.makedirs("music", exist_ok=True)
    path = 'music\{}.mp3'.format(song_name)
    #urlretrieve(song_url, path)
    #文本框
    text.insert(END,"歌曲:{}正在下载中,请稍后!".format(song_name))
    #文本框滚动
    text.see(END)
    #更新
    text.update()
    #下载
    urlretrieve(song_url, path)

    #文本框
    text.insert(END,"歌曲:{}下载结束,请欣赏!".format(song_name))
    # 文本框滚动
    text.see(END)
    # 更新
    text.update()







def get_music_name():
    name = entry.get()
    url = 'https://music.163.com/#/search/m/?id=28699996&s={}&type=1'.format(name)
    #print(url)
    #开启隐藏模式运行
    # firefox_options = Options()
    # firefox_options.add_argument('--headless')
    driver = webdriver.Firefox()

    driver.get(url)
    sleep(2)
    driver.switch_to_frame('g_iframe')

    #获取歌曲ID
    song_id = driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div/div/div[1]/div[2]/div/div/a') \
        .get_attribute('href').split('=')[-1]
    print(song_id)
    song_name = driver.find_element_by_xpath(
        '/html/body/div[3]/div/div[2]/div[2]/div/div/div[1]/div[2]/div/div/a/b/span').text

    print(song_name)
    item = {}
    item['song_id'] = song_id
    item['somg_name'] = song_name
    print(item)
    song_load(item)
    sleep(2)
    driver.quit()#退出浏览器









root = Tk()
root.title('网易云音乐')
root.geometry('560x450')

label = Label(root,text = '请输入下载的歌曲:')
#标签定位
label.grid() #默认0行,0列
#定义输入框
entry = Entry(root)
#标签定位
entry.grid(row=0,column =1)
#定义列表框
text = Listbox(root,width = 50,heigh= 15)
text.grid(row=1,columnspan=2)
#定义按钮
button= Button(root,text = '开始下载',command = get_music_name)
button.grid(row=2,column=0,sticky = W)
button1= Button(root,text = '结束下载',command = root.quit)
button1.grid(row=2,column=1,sticky =E)
root.mainloop()

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!