"""

 用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下载网易云音乐歌单歌曲,附源代码的更多相关文章

  1. 【Python3爬虫】网易云音乐歌单下载

    一.目标: 下载网易云音乐热门歌单 二.用到的模块: requests,multiprocessing,re. 三.步骤: (1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后 ...

  2. 如何下载网易云音乐APP里的MV和短视频?

    本人:网易云音乐死粉,朋友圈大多都用的是云音乐,因为推荐功能牛逼 然后:发现云音乐APP里越来越多吸引我的短视频,经常看到好的就想保存到相册,然后微信发给朋友 但是:不知道怎么下载网易云音乐的短视频, ...

  3. python3爬虫:下载网易云音乐排行榜

    #!/usr/bin/python3# -*- encoding:utf-8 -*- # 网易云音乐批量下载 import requestsimport urllib # 榜单歌曲批量下载# r = ...

  4. python爬取网易云音乐歌单音乐

    在网易云音乐中第一页歌单的url:http://music.163.com/#/discover/playlist/ 依次第二页:http://music.163.com/#/discover/pla ...

  5. 下载网易云音乐的MV

    网易云音乐有很多经典视频, 但是苦于没有下载按钮...今天就记录下如何保存MV到本地, 又get一项新技能!!! 一. 安装360极速浏览器(非安利) 二. 打开网易云音乐客户端, 点击"等 ...

  6. python3爬虫-下载网易云音乐,评论

    # -*- coding: utf-8 -*- ''' 16位随机字符的字符串 参数一 获取歌曲下载地址 "{"ids":"[1361348080]" ...

  7. python3爬取咪咕音乐榜信息(附源代码)

    参照上一篇爬虫小猪短租的思路https://www.cnblogs.com/aby321/p/9946831.html,继续熟悉基础爬虫方法,本次爬取的是咪咕音乐的排名 咪咕音乐榜首页http://m ...

  8. python3下最全的wordcloud用法,附源代码及相关文件

    一.wordcloud是什么 词云,在一段文本中提取关键词进行扁平化的展示,更能吸引目标客户的眼球. 市面上有很多在线生成词云的工具,本文以Python中的第三方库wordcloud为例讲解如何自动生 ...

  9. Python下载网易云收藏

    提前声明 仅作为个人学习使用,任何版权问题作者概不负责 本文的语言不会且不可能很严谨 博客园的编辑器有点BUG把我搞晕头了,所以本文可能有点鬼畜 前情 不知道各位有几个是对国内大厂的软件设计很满意的? ...

随机推荐

  1. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

    简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...

  2. .NET Core微服务 权限系统+工作流(二)工作流系统

    一.前言 接上一篇 .NET Core微服务 权限系统+工作流(一)权限系统 ,再来一发 工作流,我在接触这块开发的时候一直好奇它的实现方式,翻看各种工作流引擎代码,探究其实现方式,个人总结出来一个核 ...

  3. 性能测试学习第二天_性能测试工具概述Loadrunner介绍

    性能测试工具概述Loadrunner介绍 http://www.51testing.com/html/42/n-6542.html 其中,T直接影响用户体验时间 性能测试的原理: 记录一个访问过程的通 ...

  4. Unity C# 调用SaveFileDialog保存Excel文件

    本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6893934.html 本文学习如何把数据转存为Excel文件并调用SaveFileDial ...

  5. The program 'unzip' is currently not installed. You can install it by typing:

    linux解压遇到下面问题: The program 'unzip' is currently not installed. You can install it by typing: sudo ap ...

  6. C# 多线程之线程池

    线程池System.Threading.ThreadPool,可用于发送工作项.处理异步I/O.代表其它线程等待以及处理计时器.基本用法: public void Main() { ThreadPoo ...

  7. 内容显示分页数字分页 aspx

    此处是aspx里面分页显示,数据层和业务层是由动软生成 当然,我们也可以可以利用listView实现分页ListView(高效分页) public partial class NewList : Sy ...

  8. JavaScript初始

    一.JavaScript基础 1.引入方式 <!--1 直接编写--> <script> alert('hello yuan') </script> <!-- ...

  9. CSS第二节

    div做页面布局的建议 把整个网页从上到下分成若干块(一般分三块:头,中间,尾部),每一块都按下面的思路 先写第一层,可以设置背景色,或者高度和垂直居中(line-height保证内容不超出高度),不 ...

  10. 笔记 Activator.CreateInstance(Type)

    这段代码取自NopCommerce 3.80 的 权限列表初始化代码 dynamic provider = Activator.CreateInstance(providerType);   文件位置 ...