[Python] 纯文本查看 复制代码# coding=utf-8

# ---------------------------------------------

# FileName download163music.py

# Description 下载网易云音乐

# Author Forgo7ten

# Version 1.0.0

# Date 2021/1/13

import requests

import json

from Crypto.Cipher import AES

import base64

import codecs

import random

import os

def add_16(par):

if type(par) == str:

par = par.encode()

while len(par) % 16 != 0:

par += b'\x00'

return par

def en_aes_cbc(data, key, iv):

cipher = AES.new(add_16(key), AES.MODE_CBC, add_16(iv))

bs = AES.block_size

pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)

return str(base64.b64encode(cipher.encrypt(pad(data).encode("utf-8"))),

encoding="utf-8")

def en_rsa(text, pubKey, modulus):

text = text[::-1]

rs = int(codecs.encode(text.encode('utf-8'), 'hex_codec'), 16)**int(

pubKey, 16) % int(modulus, 16)

return format(rs, 'x').zfill(256)

def get_enc(music_id, en_text):

key = ""

for i in range(16):

key += random.choice(

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

params = en_aes_cbc(en_text, "0CoJUm6Qyw8W8jud", "0102030405060708")

params = en_aes_cbc(params, key, "0102030405060708")

p = "010001"

pk = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"

encSecKey = en_rsa(key, p, pk)

return params, encSecKey

def get_user_agent():

user_agent_list = [

'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)',

'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)',

'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)',

'Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)',

'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1',

'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7',

'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',

'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0',

'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',

'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14',

'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',

'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',

'Opera/9.25 (Windows NT 5.1; U; en)',

'Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6',

'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',

'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)',

'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',

'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0',

'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',

'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',

'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',

'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',

'Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5'

]

user_agent = random.choice(user_agent_list)

return user_agent

my_headers = {

"User-Agent":

get_user_agent(),

'Host':

'music.163.com',

'Connection':

'keep-alive',

'Accept':

'*/*',

'Origin':

'https://music.163.com',

'Sec-Fetch-Mode':

'cors',

'Sec-Fetch-Dest':

'empty',

"referer":

"https://music.163.com/",

'Cookie':

'_iuqxldmzr_=32; _ntes_nnid=c95cb6f082d999fd1fc1a4e51055a8f4,1608031566736; _ntes_nuid=c95cb6f082d999fd1fc1a4e51055a8f4; NMTID=00OjNCfF_IZKxcBa06ji6rGifEWAQkAAAF2ZiZ8WQ; WM_TID=9gCiV%2FNWt3JEAUFBEFI%2BOXx4SHxrqIjN; UM_distinctid=176a7e94c7b818-05d60537aea27a-3d133356-1fa400-176a7e94c7c5de; _antanalysis_s_id=1610353627583; NTES_hp_textlink1=old; JSESSIONID-WYYY=lt5%2F8s%2FXsuXCdMGROH3s7HThNf%5CPy6EK%2FsOdI5GUVHVa1BBBdomXrjFf6t4dixM%5CMPxABpG%5CsYojjz%5CIedgq%2Fp8FIq2JdGpofjwRUII%2BFMPrnnYtMrg0uAA%2B6CTs%2BbhtHKJVoDjuEECxwOyx%2FxMeX0MS%5CADw%2B8HFQBsztB%5CkeXaMQ6lW%3A1610454523379; WEVNSM=1.0.0; WNMCID=psrzsp.1610452723990.01.0; WM_NI=HT%2FDFVAV3loO%2BLXB8FNiJ225A2fxUl9KHKG1VhIkE5wKEfIpPB4LKmkm4CniH3RVwRA34uTXD6fHgF91fvNiChzm29cya4KSqe2fqqiF03MHiBgrxV1TVEsjpZ91UC82Nm4%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eed9d660b5e7fa87f848ab8e8aa6c45e939a9bbbb65c90adf8adec3cfcf18185ec2af0fea7c3b92a8c8ce1a5c55e838afd8dee45e99498a3bb4e8eb786d3b13f83eeaa99d868fb9588acc63b96b8878cc83fb5958b87cc7c949efcadca67a9b3fca4ed638ced9eb7f65a83edfc96d75488eaaaa9e64efbefaa97cd6381b8b68eb133a1a7afd5ca59b3bbfe87f47bab9a00d4d044ab9ea993fb5ef38c9aa6f262b486f7d2d849fcee828eb737e2a3; playerid=16664166'

}

def get_music_detail(music_id):

my_headers["referer"] = "https://music.163.com/song?id=" + music_id

en_text = r'{{"id":"{a}","c":"[{{\"id\":\"{b}\"}}]","csrf_token":""}}'.format(

a=music_id, b=music_id)

enc = get_enc(music_id, en_text)

my_data = {"params": enc[0], "encSecKey": enc[1]}

music_detail = requests.post(

"https://music.163.com/weapi/v3/song/detail?csrf_token=",

headers=my_headers,

data=my_data,

)

music_detail_json = json.loads(music_detail.text)

music_name = music_detail_json['songs'][0]['name']

music_author = music_detail_json['songs'][0]['ar'][0]['name']

return music_name + "-" + music_author

def get_music_url(music_id):

en_text = r'{{"ids":"[{0}]","level":"standard","encodeType":"aac","csrf_token":""}}'.format(

music_id)

enc = get_enc(music_id, en_text)

my_data = {"params": enc[0], "encSecKey": enc[1]}

my_headers["referer"] = "https://music.163.com/"

music_data_response = requests.post(

"https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=",

headers=my_headers,

data=my_data)

music_data_json_obj = json.loads(music_data_response.text)

return music_data_json_obj['data'][0]['url']

def download_music(music_data_url, music_id):

music_data = requests.get(music_data_url)

file_name = get_music_detail(music_id) + ".m4a"

if not os.path.exists("music"):

os.mkdir("music")

os.chdir("music")

with open(file_name, "wb") as f:

f.write(music_data.content)

print(file_name + " Down!")

def download_163music(music_url):

music_id = music_url.split("=")[1]

music_data_url = get_music_url(music_id)

download_music(music_data_url, music_id)

if __name__ == '__main__':

url = input("""请输入网易云音乐地址

例如 https://music.163.com/#/song?id=1807537867

如果要退出,请输入 q

""")

while url != "q":

download_163music(url)

url = input("请输入下一个链接或q:")

else:

print("程序退出!")

python怎么下载网易云歌曲_python 下载网易云歌曲(能在线听都可以)相关推荐

  1. python要学什么英文歌_Python分析网易云音乐近5年热门歌单

    由于同一歌单可能会有不同的分类,所以按这72种分类抓取的数据会有重复数据,剔重之后6.6万个热门歌单. 我按不同分类下歌单的相似度做了排行榜如下(红色部分表示相似度): 从相似度排行榜中看出流行音乐. ...

  2. python中turtle要安装吗_Python中下划线的5种含义你都知道吗?

    黑客技术 点击右侧关注,了解黑客的世界! Linux编程 点击右侧关注,免费入门到精通! 程序员严选 甄选正品好物,程序员生活指南! 本文介绍了Python中单下划线和双下划线("dunde ...

  3. python一个函数调用另一个函数_python下如何在目录下让Python文件去调用另一个文件内的函数或类...

    欢迎各位小哥哥小姐姐阅读本<小生>的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 分析 针对这个问题 ...

  4. python语言下划线怎么打_python下划线 | 学步园

    Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...

  5. python报错输出到日志_Python下的异常处理及错误日志记录

    Python使用被称为异常的特殊对象来表达执行期间发现的错误.当这些异常没有被捕获并处理时,程序将停止,并向控制台打印错误信息.这个错误信息通常是一个traceback,包含了异常的类型,以及诱发这个 ...

  6. python爬虫爬取微信网页_python下爬虫爬取微信公众号文章给网站的相关操作与问题...

    一.出发点 在dodo团队知乎号开刊文章中已介绍过本团队平常的实际工作,我们是一个从事游戏与金融结合的项目开发与运营团队.技术上主要是从事游戏分期.玩后付支付插件.游戏充值app等前后端开发,主要使用 ...

  7. python下划线怎么输入_python下划线怎么打出来

    python中下划线使用键盘上的Shift+减号键即可打出,减号键位于0和加号键之间. 在Python中下划线还具有 private 和 protected 类似的访问权限作用,下面我们具体分析.Py ...

  8. python怎么实现模糊找色_Python下尝试实现图片的高斯模糊化

    资源下载 高斯模糊是什么? (先来看一下维基百科对它的定义) 高斯模糊是模糊图像的结果.它是一种广泛使用的图形软件的影响,通常会减少图像噪声和减少细节.这个模糊技术的视觉效果是一个平滑的模糊相似,查看 ...

  9. python云图制作壮观天体照_Python爬虫,看看我最近博客都写了啥,带你制作高逼格的数据聚合云图...

    今天一时兴起,想用python爬爬自己的博客,通过数据聚合,制作高逼格的云图(对词汇出现频率视觉上的展示),看看最近我到底写了啥文章. 一.直接上几张我的博客数据的云图 1.1 爬取文章的标题的聚合 ...

  10. python爬取音乐并保存_Python爬取网易云音乐上评论火爆的歌曲

    前言 网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其中也不乏很多感人的评论.但是,网易云音乐并没有提供热评排行 ...

最新文章

  1. 【转】【C#】无边框窗体移动的三种方法
  2. 依赖注入框架Autofac学习笔记
  3. 430亿晶体管,1020万逻辑单元,英特尔发布全球最大容量FPGA,用全新硬件加速AI开发...
  4. dxf转pdf linux,4个最好的PDF转DXF格式的在线转换器
  5. #51CTO学院四周年# 还好没放弃,终于等到你~
  6. markdown html vue,vue项目引入markdown
  7. 【Java】用while循环实现1+2+3......+100
  8. 【杂项】2020年年度报告
  9. Java设计模式学习总结(3)——创建型模式之抽象工厂模式
  10. linux上数据库导入与导出(mysql)
  11. Java cms 孔浩老师 完整视频加源码 共131集 百度网盘永久链接 无需密码解压
  12. 关联分析中FPGrowth算法原理及实战
  13. 【Python123】汽车迷
  14. EditPlus配置Java运行环境
  15. HG30A-3多用表校验仪
  16. 马上谈薪了,五险一金你还不知道?作为毕业生,钱不能白交!!!
  17. 计算机接口时序波形图怎样看,TimeQuest就一定要搞定——看懂时序波形图
  18. mstar的android方案,Mstar Android 方案.pdf
  19. Fantastic-Matplotlib 第一回
  20. 再说“恢复被删除的文件”(转)

热门文章

  1. Ubuntu搭建FTP服务器
  2. 台风怎么看内存颗粒_一文全懂!内存条超频、稳定怎么看?——从入门到精通...
  3. Halcon教程七:简单的回形针识别案例
  4. 红外接收头图片_红外接收头引脚定义图解
  5. 攻略:简易VBS病毒制作
  6. 嵌入式Linux开发工具(vim的使用)
  7. 用Javascript实现随机抽奖
  8. 微信小程序底部导航栏中间突出
  9. 半导体物理学——(三)半导体中载流子的统计分布
  10. 山东理工大学2021年下半年实验室安全考试