使用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把我搞晕头了,所以本文可能有点鬼畜 前情 不知道各位有几个是对国内大厂的软件设计很满意的? ...
随机推荐
- linux php 安装xdebug
我的环境是PHP 5.2.5,下载的xdebug是Xdebug v2.2.1 源码包 PHP 5.3.20用的是Xdebug v2.1.0 {版本一定要匹配} 下载地址为:http://xdebug ...
- .net 向新页面跳转的语句
1. href='##' onclick=\"window.open('../DataSplit/DrugInfo_ManualVersionViewNew.aspx?id=" + ...
- HTML5 有哪些不同类型的存储?
HTML 5 支持本地存储,在之前版本中是通过 Cookie 实现的.HTML5 本地存储速度快而且安全. 有两种不同的对象可用来存储数据: localStorage 适用于长期存储数据,浏览器关闭后 ...
- 客户端设置WebService调用超时时间
刚接触WebService,对如何在客户端设置WebService调用超时时间查阅了一些资料,现总结如下: ============================================== ...
- git push 使用教程
git push命令用于将本地分支的更新,推送到远程主机.它的格式与git pull命令相仿. $ git push <远程主机名> <本地分支名>:<远程分支名> ...
- 梦织未来Windows驱动编程 第06课 驱动对磁盘文件的操作
代码部分: 实现一个文件C:\\text.txt,并读取写入内容到文件,然后将文件设置为只读,并隐藏文件.代码如下: //MyCreateFile.c //2016.07.22 #include &l ...
- Redis基础对象
Redis 中每个对象都由一个 redisObject 结构表示 typedef struct redisObject { //类型 unsigned type:; //编码 unsigned enc ...
- PC:各大主板开机启动项快捷键
组装机主板 品牌笔记本 品牌台式机 主板品牌 启动按键 笔记本品牌 启动按键 台式机品牌 启动按键 华硕主板 F8 联想笔记本 F12 联想台式机 F12 技嘉主板 F12 宏基笔记本 F12 惠普台 ...
- IOS截取部分图片
截取部分图片这么简单: - (void)loadView { [[UIApplication sharedApplication] setStatusBarHidden:YES withAni ...
- Codeforces Round #327 (Div. 2) B Rebranding(映射)
O(1)变换映射,最后一次性替换. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; char s[ ...