使用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把我搞晕头了,所以本文可能有点鬼畜 前情 不知道各位有几个是对国内大厂的软件设计很满意的? ...
随机推荐
- VMware下linux与window文件夹共享
这里说的是在虚拟机下来实现在windows下共享一个文件夹. 下面来说明一下是如何实现的: 1. 安装VMware.Workstation. 2. 安装Redhat Linux 9.0,在虚拟机下 ...
- Maven的学习资料收集--(二)安装m2eclipse插件
在Eclipse中可以安装Maven插件,可以更方便的使用: 官网地址:http://www.eclipse.org/m2e/ 可以在线安装或者离线下载,之前在线安装总是失败,可能是网速的原因,找到了 ...
- idea没有绑远程地址,如何提交到github的空项目
一 有同事问我怎么提交到github的空项目....这么简单.... 二 1.创建本地的git仓库 选择自己的项目 创建成功 2.添加代码,选中左边的文件,add 3.提交 5.定义远程仓库,不定义的 ...
- oop典型应用:实体类
1. 要知道这个图三者的关系 2.实体类属性类型与数据库类型 3.readonly与const的对比 两者的区别如下: ①const能修饰类中的字段(field)或者局部变量(local variab ...
- Sublime Text插件列表
本文由 伯乐在线 - 艾凌风 翻译,黄利民 校稿.英文出处:ipestov.com.欢迎加入翻译组. 本文收录了作者辛苦收集的Sublime Text最佳插件,很全. 最佳的Sublime Text ...
- NumPy(数组计算)
一.介绍 NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. 1.主要功能 1)ndarray,一个多维数组结构,高效且节省空间2)无需循环对整组数据进行快速运算的数 ...
- vue-cli脚手架构建了项目如何去除Eslint验证(语法格式验证)
Eslint是一个语法检查工具,但是限制很严格,在vue文件里面很多空格都会导致红线,取消的方式如下: 1.创建工程的时候,提示是否启用eslint检测的. Use ESLint to lint yo ...
- 适用于 Internet Explorer 11 的企业模式
https://technet.microsoft.com/zh-cn/itpro/internet-explorer/ie11-deploy-guide/enterprise-mode-overvi ...
- mif文件生成方法
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.常见生成方法: Quartus自带的mif编辑器生成 mif软件生成 高级编程语 ...
- World Wind Java开发之五——读取本地shp文件(转)
http://blog.csdn.net/giser_whu/article/details/41484433 World Wind Java 使用IconLayer图层类表现点和多点数据,使用Ren ...