使用python3下载网易云音乐歌单歌曲,附源代码
""" 用selenium+PhantomJS配合,不需要进行逆向工程
python 3下的selenium不能默认安装,需要指定版本2.48.0
"""
from selenium import webdriver
import os,requests url = 'https://music.163.com/#/playlist?id=884698131'#网易云音乐歌单
headers = {
'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
}
driver = webdriver.PhantomJS()
driver.get(url)
driver.implicitly_wait(20)#隐式等待20s
#pprint.pprint(driver.page_source)#查看源代码 def is_chinese(uchar):
"""
判断一个unicode是否是汉字
:param uchar: <char>字符
:return: <boolean>
"""
if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
return True
else:
return False def is_number(uchar):
"""
判断一个unicode是否是数字
:param uchar: <char>字符
:return: <boolean>
"""
if uchar >= u'\u0030' and uchar <= u'\u0039':
return True
else:
return False def is_alphabet(uchar):
"""
判断一个unicode是否是英文字母
:param uchar: <char>字符
:return: <boolean>
"""
if (uchar >= u'\u0041' and uchar <= u'\u005a') or (uchar >= u'\u0061' and uchar <= u'\u007a'):
return True
else:
return False
def is_filename(uchar):
"""
排除文件名不可用的字符,这里请注意都是在英文输入法下的,若是中文输入法下的例如?“等是可以用来生成文件名的
\/:*?"<>|
:param uchar:
:return:
"""
if uchar == u'\u005c' or uchar == u'\u002f' or uchar == u'\u003a' or uchar == u'\u002a' or uchar == u'\u003f' or uchar == u'\u007c' \
or uchar == u'\u003c' or uchar == u'\u003e' or uchar == u'\u007c':
return False
else:
return True def format_str(content):
"""
将字符串content中的字符逐个判断
:param content: <str>输入文本
:return: <str>输出只包含中文、数字及英文字母的字符串
"""
content_str = ''
for i in content:
if is_chinese(i) or is_alphabet(i) or is_number(i):
content_str = content_str+i
print('处理后的content:',content_str)
return content_str def format_str2(content): content_str = ''
for i in content:
if is_filename(i):
content_str = content_str+i
print('处理后的content:',content_str)
return content_str driver.switch_to.frame('g_iframe')#跳转到id为g_iframe的iframe框架下 list_name = driver.find_element_by_class_name('f-ff2').text #歌单名称
#大坑,源代码中是class=“f-ff2 f-brk”,属性值中间有空格,全写上报错
# #list_name2 = driver.find_element_by_xpath('//div[@class=\"m-info\"]/div[2]')
print(list_name) #list_path = os.getcwd()+ '/网易云音乐歌单-' + format_str(list_name)
list_path = os.getcwd()+ '/网易云音乐歌单-' + format_str2(list_name) if os.path.exists(list_path):
pass
else:
os.mkdir(list_path)#若文件夹不存在,则新建 ids = driver.find_elements_by_xpath('//a[starts-with(@href,"/song?id=")]')
names = driver.find_elements_by_xpath('//a[starts-with(@href,"/song?id=")]/b')
for i in range(0,len(ids)):
#id = ids[i].get_attribute('href').strip('https://music.163.com/song?id=')#有问题,获取的某些歌曲id不全,原因未知
id = ids[i].get_attribute('href').replace('https://music.163.com/song?id=','')
name = format_str2(names[i].get_attribute('title').strip().replace('/','')) print(id,name)
link = 'http://music.163.com/song/media/outer/url?id=' + id + '.mp3'
#urllib.request.urlretrieve(link,'E:/'+id+'.mp3')#有时候下载下来的歌曲只有几十kb if os.path.exists(list_path + '/' + str(i + 1) + '_' + name + '.mp3') \
and (os.path.getsize(list_path + '/' + str(i + 1) + '_' + name + '.mp3')) >= 102400:
# 若歌曲存在且能正常播放(此处判断为大于100kb)则不再下载
pass else:
with open(list_path + '/' + str(i + 1) + '_' + name + '.mp3', 'wb') as f:
f.write(requests.get(link, headers=headers).content) #有些歌曲能下载下来但是只有67kb左右,也无法播放,也就是网易云上显示但是无法在线听的音乐
if os.path.getsize(list_path + '/' + str(i + 1) + '_' + name + '.mp3') < 102400:
os.remove(list_path + '/' + str(i + 1) + '_' + name + '.mp3')
else:
pass driver.switch_to.default_content()#返回主文档
使用python3下载网易云音乐歌单歌曲,附源代码的更多相关文章
- 【Python3爬虫】网易云音乐歌单下载
一.目标: 下载网易云音乐热门歌单 二.用到的模块: requests,multiprocessing,re. 三.步骤: (1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后 ...
- 如何下载网易云音乐APP里的MV和短视频?
本人:网易云音乐死粉,朋友圈大多都用的是云音乐,因为推荐功能牛逼 然后:发现云音乐APP里越来越多吸引我的短视频,经常看到好的就想保存到相册,然后微信发给朋友 但是:不知道怎么下载网易云音乐的短视频, ...
- python3爬虫:下载网易云音乐排行榜
#!/usr/bin/python3# -*- encoding:utf-8 -*- # 网易云音乐批量下载 import requestsimport urllib # 榜单歌曲批量下载# r = ...
- python爬取网易云音乐歌单音乐
在网易云音乐中第一页歌单的url:http://music.163.com/#/discover/playlist/ 依次第二页:http://music.163.com/#/discover/pla ...
- 下载网易云音乐的MV
网易云音乐有很多经典视频, 但是苦于没有下载按钮...今天就记录下如何保存MV到本地, 又get一项新技能!!! 一. 安装360极速浏览器(非安利) 二. 打开网易云音乐客户端, 点击"等 ...
- python3爬虫-下载网易云音乐,评论
# -*- coding: utf-8 -*- ''' 16位随机字符的字符串 参数一 获取歌曲下载地址 "{"ids":"[1361348080]" ...
- python3爬取咪咕音乐榜信息(附源代码)
参照上一篇爬虫小猪短租的思路https://www.cnblogs.com/aby321/p/9946831.html,继续熟悉基础爬虫方法,本次爬取的是咪咕音乐的排名 咪咕音乐榜首页http://m ...
- python3下最全的wordcloud用法,附源代码及相关文件
一.wordcloud是什么 词云,在一段文本中提取关键词进行扁平化的展示,更能吸引目标客户的眼球. 市面上有很多在线生成词云的工具,本文以Python中的第三方库wordcloud为例讲解如何自动生 ...
- Python下载网易云收藏
提前声明 仅作为个人学习使用,任何版权问题作者概不负责 本文的语言不会且不可能很严谨 博客园的编辑器有点BUG把我搞晕头了,所以本文可能有点鬼畜 前情 不知道各位有几个是对国内大厂的软件设计很满意的? ...
随机推荐
- 【C#】=>符号的使用
Lambda表达式.Lambda表达式是C#3.0的新内容,如果您之前学习的C#2.0,不认识也就不奇怪了.给您举个例子.例如,我定义一个委托:delegate int Method(int a, i ...
- Ini文件格式说明
http://www.cnblogs.com/CUIT-DX037/ 百度百科介绍:ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储 ...
- python基本数据类型,int,bool,str
一丶python基本数据类型 1.int 整数,主要用来进行数学运算. 2.str 字符串,可以保存少量数据并进行相应的操作 3.bool 判断真假.True.False 4.list 存储大量数据, ...
- js中函数声明先提升还是变量先提升
根据官方书籍<你不知道的javascript>(上卷)中写道: "函数会首先被提升,然后才是变量". 例子: console.log(foo); function fo ...
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)
欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...
- genlist -s 192.168.21.\*
显示网段192.168.21中可用的主机.
- yum安装软件并保留下载的软件
使用yum插件downloadonly下载安装软件需要的依赖包并保留到指定的文件 安装yum-downloadonly或 yum-plugin-downloadonly 软件包. yum instal ...
- c++树的表示方法
c++树的节点的表示方法: typedef struct Node *Tree; struct Node { int data; Node *left; Node *right; int flag; ...
- java模式
模式(Pattern) 模式(Pattern)的概念最早由建筑大师Christopher Alexander于二十世纪七十年代提出,应用于建筑领域,八十年代中期由Ward Cunningham和Ken ...
- systemd初始化进程(转)
Systemd初始化进程 Linux操作系统开机过程首先从BIOS开始→进入"Boot Loader"→加载内核→内核的初始化→启动初始化进程,初始化进程作为系统第一个进程,它需要 ...