selenium模块太强大了,网易云音乐都可下载

   日期:2020-05-04     浏览:158    评论:0    
核心提示:这是我前一段时间做的一个项目,本来直接想用requests模块来爬取网易云音乐的,但是那太复杂了,我python

原标题:运用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解码与编码,我还会推出新的文章的。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服