python下载音乐代码_使用python3下载网易云音乐歌单歌曲,附源代码

2023-05-16

1 """

2

3 用selenium+PhantomJS配合,不需要进行逆向工程4 python 3下的selenium不能默认安装,需要指定版本2.48.05 """

6 from selenium importwebdriver7 importos,requests8

9

10

11 url = 'https://music.163.com/#/playlist?id=884698131'#网易云音乐歌单

12 headers ={13 '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',14 }15 driver =webdriver.PhantomJS()16 driver.get(url)17 driver.implicitly_wait(20)#隐式等待20s

18 #pprint.pprint(driver.page_source)#查看源代码

19

20 defis_chinese(uchar):21 """

22 判断一个unicode是否是汉字23 :param uchar: 字符24 :return: 25 """

26 if uchar >= u'\u4e00' and uchar <= u'\u9fa5':27 returnTrue28 else:29 returnFalse30

31 defis_number(uchar):32 """

33 判断一个unicode是否是数字34 :param uchar: 字符35 :return: 36 """

37 if uchar >= u'\u0030' and uchar <= u'\u0039':38 returnTrue39 else:40 returnFalse41

42

43 defis_alphabet(uchar):44 """

45 判断一个unicode是否是英文字母46 :param uchar: 字符47 :return: 48 """

49 if (uchar >= u'\u0041' and uchar <= u'\u005a') or (uchar >= u'\u0061' and uchar <= u'\u007a'):50 returnTrue51 else:52 returnFalse53 defis_filename(uchar):54 """

55 排除文件名不可用的字符,这里请注意都是在英文输入法下的,若是中文输入法下的例如?“等是可以用来生成文件名的56 \/:*?"<>|57 :param uchar:58 :return:59 """

60 if uchar == u'\u005c' or uchar == u'\u002f' or uchar == u'\u003a' or uchar == u'\u002a' or uchar == u'\u003f' or uchar == u'\u007c'\61 or uchar == u'\u003c' or uchar == u'\u003e' or uchar == u'\u007c':62 returnFalse63 else:64 returnTrue65

66 defformat_str(content):67 """

68 将字符串content中的字符逐个判断69 :param content: 输入文本70 :return: 输出只包含中文、数字及英文字母的字符串71 """

72 content_str = ''

73 for i incontent:74 if is_chinese(i) or is_alphabet(i) oris_number(i):75 content_str = content_str+i76 print('处理后的content:',content_str)77 returncontent_str78

79 defformat_str2(content):80

81 content_str = ''

82 for i incontent:83 ifis_filename(i):84 content_str = content_str+i85 print('处理后的content:',content_str)86 returncontent_str87

88

89 driver.switch_to.frame('g_iframe')#跳转到id为g_iframe的iframe框架下

90

91

92 list_name = driver.find_element_by_class_name('f-ff2').text #歌单名称

93 #大坑,源代码中是class=“f-ff2 f-brk”,属性值中间有空格,全写上报错

94 ##list_name2 = driver.find_element_by_xpath('//div[@class=\"m-info\"]/div[2]')

95 print(list_name)96

97 #list_path = os.getcwd()+ '/网易云音乐歌单-' + format_str(list_name)

98 list_path = os.getcwd()+ '/网易云音乐歌单-' +format_str2(list_name)99

100 ifos.path.exists(list_path):101 pass

102 else:103 os.mkdir(list_path)#若文件夹不存在,则新建

104

105 ids = driver.find_elements_by_xpath('//a[starts-with(@href,"/song?id=")]')106 names = driver.find_elements_by_xpath('//a[starts-with(@href,"/song?id=")]/b')107 for i inrange(0,len(ids)):108 #id = ids[i].get_attribute('href').strip('https://music.163.com/song?id=')#有问题,获取的某些歌曲id不全,原因未知

109 id = ids[i].get_attribute('href').replace('https://music.163.com/song?id=','')110 name = format_str2(names[i].get_attribute('title').strip().replace('/',''))111

112 print(id,name)113 link = 'http://music.163.com/song/media/outer/url?id=' + id + '.mp3'

114 #urllib.request.urlretrieve(link,'E:/'+id+'.mp3')#有时候下载下来的歌曲只有几十kb

115

116 if os.path.exists(list_path + '/' + str(i + 1) + '_' + name + '.mp3') \117 and (os.path.getsize(list_path + '/' + str(i + 1) + '_' + name + '.mp3')) >= 102400:118 #若歌曲存在且能正常播放(此处判断为大于100kb)则不再下载

119 pass

120

121 else:122 with open(list_path + '/' + str(i + 1) + '_' + name + '.mp3', 'wb') as f:123 f.write(requests.get(link, headers=headers).content)124

125 #有些歌曲能下载下来但是只有67kb左右,也无法播放,也就是网易云上显示但是无法在线听的音乐

126 if os.path.getsize(list_path + '/' + str(i + 1) + '_' + name + '.mp3') < 102400:127 os.remove(list_path + '/' + str(i + 1) + '_' + name + '.mp3')128 else:129 pass

130

131 driver.switch_to.default_content()#返回主文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python下载音乐代码_使用python3下载网易云音乐歌单歌曲,附源代码 的相关文章

  • 如何为 PyYAML 编写代表程序?

    我想要一个自定义函数来序列化任意 python 对象 就像 json dump 函数有一个名为 default 的可选参数 如果对象不是 json 可序列化的 它应该是 json 转储器将调用的函数 我只是想从 json 包中执行相当于此操
  • 如何在 Google App Engine (Python) 中定义配置变量/常量?

    我是 python GAE 的新手 想知道如何快速定义和使用全局设置变量 所以说你 git 克隆我的 GAE 应用程序 然后打开config yaml 添加更改设置 应用程序就全部连接起来 如下所示 config yaml or whate
  • python osmnx - 仅提取一个国家的大型高速公路

    我知道可以通过 OSMNX python 包提取城市的道路网络 详情请参阅https geoffboeing com 2016 11 osmnx python street networks https geoffboeing com 20
  • 如何在Python中将N毫秒添加到日期时间

    我正在设置一个日期时间变量 fulldate datetime datetime strptime date time Y m d H M S f 其中日期和时间是适合日期时间性质的字符串 如何将此日期时间增加 N 毫秒 Use timed
  • dask分布式内存错误

    在分布式作业上运行 Dask 时 我在调度程序上遇到以下错误 distributed core ERROR Traceback most recent call last File usr local lib python3 4 dist
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • 抓取 Shopee API v4

    我有一个最终项目 其中我想要检索的数据是通过在shopee上抓取数据来获取的 但是当我在隐藏的API上抓取shopee时遇到问题 当我在Insomnia脚本上尝试时 脚本会运行 但是当我尝试时在本地或 google colab 脚本上 这是
  • Spacy-nightly (spacy 2.0) 问题“thinc.extra.MaxViolation 大小错误”

    显然成功安装了 spacy nightly spacy nightly 2 0 0a14 和英语模型 en core web sm 后 我在尝试运行它时仍然收到错误消息 import spacy nlp spacy load en core
  • 如何让 Python 生成器返回 None 而不是 StopIteration?

    我使用生成器在列表中执行搜索 如下简单示例 gt gt gt a 1 2 3 4 gt gt gt i for i v in enumerate a if v 4 next 3 只是为了稍微说明一下示例 与上面的列表相比 我使用的列表要长得
  • 为什么变量 1 += 变量 2 比变量 1 = 变量 1 + 变量 2 快得多?

    我继承了一些 Python 代码 用于创建巨大的表 最多 19 列宽 5000 行 花了九秒用于在屏幕上绘制表格 我注意到每一行都是使用以下代码添加的 sTable sTable n GetRow where sTable是一个字符串 我将
  • Python - 将列表作为参数传递给 SQL,以及更多变量

    我试图在 python 3 6 中将未知数量的参数传递给 SQL Server 这是我使用 pypyodbc 的代码 cursor cnxn cursor theargs 1033286869 1053474957 1063654630 1
  • 导入错误:无法导入名称

    我有一个名为 google translate python 的库 https github com terryyin google translate python https github com terryyin google tra
  • 如何限制单元测试的最大运行时间?

    我目前正在运行一些单元测试 这些测试可能需要很长时间才能失败或无限期地运行 在成功的测试运行中 它们总是会在一定的时间内完成 是否可以创建一个 pytest 单元测试 如果在一定时间内未完成 该测试就会失败 您可以安装 pytest tim
  • Mac 无法安装 Tensorflow

    我检查了我的 pip3 和 python3 版本 tensorflow MacBook Pro de Hector 2 tensorflow hectoresteban pip3 V pip 10 0 1 from Users hector
  • 合并共享属性的节点

    EDITED 我真的需要 Networkx graph 专家的帮助 假设我有以下数据框 我想将这些数据框转换为图表 然后我想根据描述和优先级属性将两个图映射到相应的节点 df1 From description To priority 10
  • 定义Python类时,如何在其中设置随机变量?

    假设我有一个名为Person 其中只有该人的姓名和性别 性别应从男性和女性中随机选择 为此 我导入random randint 功能 根据随机int确定随机性别 import random class Person alias random
  • 将表抓取到列表中

    我正在尝试从网页中提取表格 我已经设法将表中的所有数据放入列表中 然而 所有表数据都被放入一个列表元素中 我需要帮助将 干净 数据 即字符串 没有所有 HTML 包装 从表的行获取到它们自己的列表元素中 所以而不是 list tr th a
  • 加入列表中除最后 x 之外的所有内容

    我有一个列表 想要加入除最后 2 个条目之外的所有条目 IE x 1 2 3 4 print join x from 0 until 3 那么输出将是1 2 我怎样才能做到这一点 Use slicing https docs python
  • 分别记录 stdout 和 stderr 时截断的输出日志文件

    我在上下文管理器中设置了一个子进程命令 该命令通过我自己的记录器将 stdout 和 stderr 通过管道传输到单独的文件 这是此处给出的答案的变体 https stackoverflow com a 4838875 4844311 ht
  • 如何用Python检查一个单词是否是英文单词?

    我想在 Python 程序中检查一个单词是否在英语词典中 我相信 nltk wordnet 接口可能是可行的方法 但我不知道如何使用它来完成如此简单的任务 def is english word word pass how to I imp

随机推荐