原标题:运用selenium下载网易云音乐
前言:
声明:本程序代码仅供娱乐和学习,切莫用于商业活动,一经发现,概不负责!
文章目录
- 原标题:运用selenium下载网易云音乐
- 1.了解完成这个项目需要的python模块和需要安装的软件
- 1.1 需要安装的软件
- 1.2 需要的python模块
- 2.实现下载网易云音乐的过程
- 3.最终代码和运行结果
- 4.总结
1.了解完成这个项目需要的python模块和需要安装的软件
1.1 需要安装的软件
既然是使用selenium模块,那么就少不了谷歌浏览器。另外,我们需要安装一个chromedriver.exe
网址为:chromedriver.exe的下载
这需要根据自己的谷歌浏览器的版本来下载,下载完毕之后,我们将它解压,放到python文件夹下面,像我这样:
1.2 需要的python模块
需要urllib模块、selenium模块、time、os、sys
其实完成这个项目需要的模块仅仅只要前两个模块即可,后面那三个模块只是用来创建文件夹和进度条的。
2.实现下载网易云音乐的过程
首先,我们需要来到网易云音乐的官网,在输入框中输入一首歌的歌名,我输入的是 :最美的期待
然后,按电脑键盘F12键查看如下:
完成这个项目我们只需要这两个信息就足够了。
代码如下:
page=driver.find_element_by_id('m-search')
song_id_list=page.find_elements_by_xpath('.//div[@class="sn"]/div[@class="text"]/a')# 得到所有歌曲的音频和视频
song_name_list=page.find_elements_by_xpath('.//div[@class="sn"]/div[@class="text"]/a/b')
song_id_list_1=[] # 所有歌曲的音频
for i in range(len(song_id_list)):
song_id_list[i]=song_id_list[i].get_attribute('href')
if 'song'in song_id_list[i]:
song_id_list_1.append(song_id_list[i])
for i in range(len(song_name_list)):
song_name_list[i]=song_name_list[i].get_attribute('title')
不过,没有这么简单就能得到这两个信息,这些信息是在一个iframe的框架下面,所以,我们需要这样:
driver.switch_to.frame('g_iframe')
之后,就是下载歌曲了,这里需要一个下载网址,我从一次视频听课上看到的,https://music.163.com/song/media/outer/url?id={}.mp3,中间那个大括号代表歌曲的id信息,这样就可以下载歌曲了。
是不是觉得很简单,相比如用requests模块。
3.最终代码和运行结果
先看一下运行结果吧!
运用selenium下载网易云音乐
代码如下:
import urllib.parse as parse
from selenium import webdriver
import time
import urllib.request
import os
import sys
def Time_1(): # 进度条函数
for i in range(1,51):
sys.stdout.write('\r')
sys.stdout.write('{0}% |{1}'.format(int(i%51)*2,int(i%51)*'■'))
sys.stdout.flush()
time.sleep(0.125)
sys.stdout.write('\n')
def Music_search():
print('-----------------------网易云----------------------------')
url='https://music.163.com/#/search/m/?%s&type=1'%(parse.urlencode({'s':input('请输入歌曲名称:')}))
driver=webdriver.Chrome(executable_path='D:\Python\chromedriver.exe')
driver.get(url=url)
driver.switch_to.frame('g_iframe')
page=driver.find_element_by_id('m-search')
song_id_list=page.find_elements_by_xpath('.//div[@class="sn"]/div[@class="text"]/a')# 得到所有歌曲的音频和视频
song_name_list=page.find_elements_by_xpath('.//div[@class="sn"]/div[@class="text"]/a/b')
song_id_list_1=[] # 所有歌曲的音频
for i in range(len(song_id_list)):
song_id_list[i]=song_id_list[i].get_attribute('href')
if 'song'in song_id_list[i]:
song_id_list_1.append(song_id_list[i])
for i in range(len(song_name_list)):
song_name_list[i]=song_name_list[i].get_attribute('title')
driver.close()
return song_name_list,song_id_list_1 # 返回歌曲名称、歌曲id
def Downlad(music_name,url_1):
id=url_1[url_1.find('id='):]
url='https://music.163.com/song/media/outer/url?{}.mp3'.format(id)
try:
os.mkdir(path='./网易云下载')
except Exception as e:
print(e,'但不要紧,程序仍然继续执行!')
finally:
print('{}.mp3正在下载当中!请等待一下...'.format(music_name))
Time_1()
urllib.request.urlretrieve(url=url, filename='./网易云下载/{}.mp3'.format(music_name))
print('{}.mp3已经下载完毕!'.format(music_name))
print('请到当前文件夹下面查看!')
if __name__ == '__main__':
list_1=Music_search()
print('符合要求的音乐如下:')
for i in range(len(list_1[0])):
print('-{}-{}'.format(i+1,list_1[0][i]))
i=int(input('请输入你想下载的音乐序号:'))
Downlad(list_1[0][i-1],list_1[1][i-1])
我也不知道上传上去的这个代码缩进有没有问题,如果有,请大家及时留言,我会重新上传的;没有最好。
4.总结
这个项目相比较运用requests模块做,难度简单了许多,如果在以后的学习里,我懂得了那些js解码与编码,我还会推出新的文章的。