国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

極客小將

您現在的位置是:首頁 » python編程資訊

資訊內容

實現python批量下載網易云音樂的免費音樂

極客小將2020-12-30-
簡介python視頻教程欄目介紹實現下載免費音樂相關免費學習推薦:python視頻教程運行效果代碼#-*-coding:utf-8-*-importrequests,hashlib,sys,click,re,base64,binascii,json,osfromCrypto.CipherimportAE
python視頻教程欄目介紹實現下載免費音樂

8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

相關免費學習推薦:python視頻教程8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

運行效果8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

代碼8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

# -*- coding:utf-8 -*- import requests, hashlib, sys, click, re, base64, binascii, json, os from Crypto.Cipher import AES from http import cookiejar """ Website:http://cuijiahua.com Author:Jack Cui Refer:https://github.com/darknessomi/musicbox """ class Encrypyed(): """ 解密算法 """ def __init__(self): self.modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7' self.nonce = '0CoJUm6Qyw8W8jud' self.pub_key = '010001' # 登錄加密算法, 基于https://github.com/stkevintan/nw_musicbox腳本實現 def encrypted_request(self, text): text = json.dumps(text) sec_key = self.create_secret_key(16) enc_text = self.aes_encrypt(self.aes_encrypt(text, self.nonce), sec_key.decode('utf-8')) enc_sec_key = self.rsa_encrpt(sec_key, self.pub_key, self.modulus) data = {'params': enc_text, 'encSecKey': enc_sec_key} return data def aes_encrypt(self, text, secKey): pad = 16 - len(text) % 16 text = text + chr(pad) * pad encryptor = AES.new(secKey.encode('utf-8'), AES.MODE_CBC, b'0102030405060708') ciphertext = encryptor.encrypt(text.encode('utf-8')) ciphertext = base64.b64encode(ciphertext).decode('utf-8') return ciphertext def rsa_encrpt(self, text, pubKey, modulus): text = text[::-1] rs = pow(int(binascii.hexlify(text), 16), int(pubKey, 16), int(modulus, 16)) return format(rs, 'x').zfill(256) def create_secret_key(self, size): return binascii.hexlify(os.urandom(size))[:16] class Song(): """ 歌曲對象,用于存儲歌曲的信息 """ def __init__(self, song_id, song_name, song_num, song_url=None): self.song_id = song_id self.song_name = song_name self.song_num = song_num self.song_url = '' if song_url is None else song_url class Crawler(): """ 網易云爬取API """ def __init__(self, timeout=60, cookie_path='.'): self.headers = { 'Accept': '*/*', 'Accept-Encoding': 'gzip,deflate,sdch', 'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'music.163.com', 'Referer': 'http://music.163.com/search/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' } self.session = requests.Session() self.session.headers.update(self.headers) self.session.cookies = cookiejar.LWPCookieJar(cookie_path) self.download_session = requests.Session() self.timeout = timeout self.ep = Encrypyed() def post_request(self, url, params): """ Post請求 :return: 字典 """ data = self.ep.encrypted_request(params) resp = self.session.post(url, data=data, timeout=self.timeout) result = resp.json() if result['code'] != 200: click.echo('post_request error') else: return result def search(self, search_content, search_type, limit=9): """ 搜索API :params search_content: 搜索內容 :params search_type: 搜索類型 :params limit: 返回結果數量 :return: 字典. """ url = 'http://music.163.com/weapi/cloudsearch/get/web?csrf_token=' params = {'s': search_content, 'type': search_type, 'offset': 0, 'sub': 'false', 'limit': limit} result = self.post_request(url, params) return result def search_song(self, song_name, song_num, quiet=True, limit=9): """ 根據音樂名搜索 :params song_name: 音樂名 :params song_num: 下載的歌曲數 :params quiet: 自動選擇匹配**優(yōu)結果 :params limit: 返回結果數量 :return: Song獨享 """ result = self.search(song_name, search_type=1, limit=limit) if result['result']['songCount'] <= 0: click.echo('Song {} not existed.'.format(song_name)) else: songs = result['result']['songs'] if quiet: song_id, song_name = songs[0]['id'], songs[0]['name'] song = Song(song_id=song_id, song_name=song_name, song_num=song_num) return song def get_song_url(self, song_id, bit_rate=320000): """ 獲得歌曲的下載地址 :params song_id: 音樂ID<int>. :params bit_rate: {'MD 128k': 128000, 'HD 320k': 320000} :return: 歌曲下載地址 """ url = 'http://music.163.com/weapi/song/enhance/player/url?csrf_token=' csrf = '' params = {'ids': [song_id], 'br': bit_rate, 'csrf_token': csrf} result = self.post_request(url, params) # 歌曲下載地址 song_url = result['data'][0]['url'] # 歌曲不存在 if song_url is None: click.echo('Song {} is not available due to copyright issue.'.format(song_id)) else: return song_url def get_song_by_url(self, song_url, song_name, song_num, folder): """ 下載歌曲到本地 :params song_url: 歌曲下載地址 :params song_name: 歌曲名字 :params song_num: 下載的歌曲數 :params folder: 保存路徑 """ if not os.path.exists(folder): os.makedirs(folder) fpath = os.path.join(folder, str(song_num) + '_' + song_name + '.mp3') if sys.platform == 'win32' or sys.platform == 'cygwin': valid_name = re.sub(r'[<>:"/\|?*]', '', song_name) if valid_name != song_name: click.echo('{} will be saved as: {}.mp3'.format(song_name, valid_name)) fpath = os.path.join(folder, str(song_num) + '_' + valid_name + '.mp3') if not os.path.exists(fpath): resp = self.download_session.get(song_url, timeout=self.timeout, stream=True) length = int(resp.headers.get('content-length')) label = 'Downloading {} {}kb'.format(song_name, int(length/1024)) with click.progressbar(length=length, label=label) as progressbar: with open(fpath, 'wb') as song_file: for chunk in resp.iter_content(chunk_size=1024): if chunk: song_file.write(chunk) progressbar.update(1024) class Netease(): """ 網易云音樂下載 """ def __init__(self, timeout, folder, quiet, cookie_path): self.crawler = Crawler(timeout, cookie_path) self.folder = '.' if folder is None else folder self.quiet = quiet def download_song_by_search(self, song_name, song_num): """ 根據歌曲名進行搜索 :params song_name: 歌曲名字 :params song_num: 下載的歌曲數 """ try: song = self.crawler.search_song(song_name, song_num, self.quiet) except: click.echo('download_song_by_serach error') # 如果找到了音樂, 則下載 if song != None: self.download_song_by_id(song.song_id, song.song_name, song.song_num, self.folder) def download_song_by_id(self, song_id, song_name, song_num, folder='.'): """ 通過歌曲的ID下載 :params song_id: 歌曲ID :params song_name: 歌曲名 :params song_num: 下載的歌曲數 :params folder: 保存地址 """ try: url = self.crawler.get_song_url(song_id) # 去掉非法字符 song_name = song_name.replace('/', '') song_name = song_name.replace('.', '') self.crawler.get_song_by_url(url, song_name, song_num, folder) except: click.echo('download_song_by_id error') if __name__ == '__main__': timeout = 60 output = 'Musics' quiet = True cookie_path = 'Cookie' netease = Netease(timeout, output, quiet, cookie_path) music_list_name = 'music_list.txt' # 如果music列表存在, 那么開始下載 if os.path.exists(music_list_name): with open(music_list_name, 'r') as f: music_list = list(map(lambda x: x.strip(), f.readlines())) for song_num, song_name in enumerate(music_list): netease.download_song_by_search(song_name,song_num + 1) else: click.echo('music_list.txt not exist.')

相關免費學習推薦:php編程(視頻)
8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

以上就是實現python批量下載網易云音樂的免費音樂的詳細內容,更多請關注少兒編程網其它相關文章!8jC少兒編程網-Scratch_Python_教程_免費兒童編程學習平臺

預約試聽課

已有385人預約都是免費的,你也試試吧...

国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

        欧美日韩在线中文| 我要看一级黄色大片| 黄色免费网址大全| 成人国产一区二区三区| 亚洲无吗一区二区三区| 免费看国产一级片| 麻豆传媒网站在线观看| 亚洲第一天堂久久| av天堂永久资源网| 精品少妇人妻av免费久久洗澡| 婷婷激情小说网| 亚洲 欧美 日韩系列| 久久久噜噜噜www成人网| 日本国产中文字幕| 欧美一二三不卡| 一级黄色片播放| 青青草影院在线观看| 亚洲精品www.| 午夜免费看视频| 天天干天天玩天天操| 国产精品久久久久9999小说| 亚洲色欲综合一区二区三区| 99久久国产综合精品五月天喷水| 无码人妻aⅴ一区二区三区日本| 欧美成人乱码一二三四区免费| 丝袜老师办公室里做好紧好爽| 夫妻免费无码v看片| av动漫免费看| 亚洲免费av一区二区三区| 中文字幕欧美人妻精品一区| 久草在在线视频| 国产一级特黄a大片免费| the porn av| 91欧美一区二区三区| 最新av网址在线观看| 欧美日韩dvd| 中文字幕日韩精品无码内射| 蜜臀av色欲a片无码精品一区| 9色porny| 日韩手机在线观看视频| 依人在线免费视频| 免费av不卡在线| 二级片在线观看| 男女私大尺度视频| 欧美精品aaaa| 4444在线观看| 日韩av播放器| 99re99热| 国产免费毛卡片| 一区二区三区视频网| 超级碰在线观看| chinese少妇国语对白| 午夜av中文字幕| 国产精品久久中文字幕| 天天色综合社区| 免费在线看黄色片| 热久久精品免费视频| 国产女人18毛片| 天天爽人人爽夜夜爽| 蜜桃视频一区二区在线观看| 久久久久久久久久久免费视频| 中文字幕日韩久久| 韩国日本美国免费毛片| 黄色a级片免费看| 污视频网站观看| 国产精品宾馆在线精品酒店| 免费看污污视频| 欧美美女一级片| 免费黄色日本网站| 国产精品88久久久久久妇女| 无码人妻精品一区二区三区66| 免费一级淫片aaa片毛片a级| 国产成人在线综合| 少妇高清精品毛片在线视频| 热久久最新网址| 一级黄色高清视频| 日本高清久久久| 国产精品久久久毛片| 99蜜桃臀久久久欧美精品网站| 欧美狂野激情性xxxx在线观| 99久久久无码国产精品性色戒| 天堂av在线网站| 亚洲成人av免费看| 国产天堂在线播放| 日本www在线播放| 97超碰人人澡| 国产乱子伦农村叉叉叉| 999一区二区三区| 日韩精品在线观看av| 男人日女人的bb| 国产 国语对白 露脸| 亚洲高潮无码久久| 无码人妻精品一区二区蜜桃网站| 在线无限看免费粉色视频| 想看黄色一级片| 日韩a一级欧美一级| 久久人人爽人人片| 91性高潮久久久久久久| 国产女同无遮挡互慰高潮91| 午夜xxxxx| 91免费国产精品| 男人插女人视频在线观看| 蜜臀精品一区二区| av片在线免费| 免费看国产一级片| 成熟老妇女视频| 亚洲一区在线不卡| 日韩av片免费观看| 激情六月天婷婷| 岳毛多又紧做起爽| 久久国产这里只有精品| 中文字幕黄色大片| 欧美一级视频免费看| 欧美日韩亚洲一二三| 天堂在线资源视频| 激情文学亚洲色图| 日韩xxxx视频| 成年网站免费在线观看| 国产精品日韩三级| 日韩手机在线观看视频| 色男人天堂av| 男人天堂网视频| 国产奶头好大揉着好爽视频| 国产真实老熟女无套内射| 免费日韩中文字幕| 永久免费在线看片视频| 国产白丝袜美女久久久久| 亚洲一区在线不卡| 欧美一区二区激情| 国产精品视频中文字幕| 999久久欧美人妻一区二区| 无码无遮挡又大又爽又黄的视频| 日本高清一区二区视频| 日韩少妇内射免费播放18禁裸乳| 一级 黄 色 片一| 噜噜噜久久亚洲精品国产品麻豆| 五月天视频在线观看| 国产免费毛卡片| 国产91视频一区| 香蕉精品视频在线| 亚洲这里只有精品| 日韩精品视频在线观看视频| 中文国产在线观看| 国产成人精品无码播放| 日本手机在线视频| 四虎4hu永久免费入口| 手机在线免费观看毛片| 国产主播自拍av| 无码人妻aⅴ一区二区三区日本| 色www免费视频| 可以在线看的黄色网址| 国产深夜男女无套内射| 日本大胆人体视频| 国产人妻互换一区二区| 午夜剧场在线免费观看| 香蕉视频禁止18| 9久久婷婷国产综合精品性色| 久久国产精品网| www.日本在线播放| 日韩欧美国产综合在线| 国产夫妻自拍一区| 丰满的少妇愉情hd高清果冻传媒| www.午夜色| 国产成人免费高清视频| а 天堂 在线| 成人在线观看www| 香蕉视频免费版| 日本三日本三级少妇三级66| 青青视频免费在线| 日韩精品视频在线观看视频| 少妇高潮毛片色欲ava片| 国产91沈先生在线播放| r级无码视频在线观看| 国产在线播放观看| 免费日韩中文字幕| 嫩草影院国产精品| 亚洲综合在线一区二区| 真人做人试看60分钟免费| 东北少妇不带套对白| 亚洲熟妇av一区二区三区| 精品999在线| 日韩 欧美 自拍| 青青艹视频在线| 五月婷婷丁香综合网| 麻豆md0077饥渴少妇| 91专区在线观看| 久久婷五月综合| 中文字幕超清在线免费观看| 99色这里只有精品| 手机在线免费观看毛片| 裸体裸乳免费看| 美女av免费在线观看| 午夜一区二区视频| 777久久精品一区二区三区无码| 日本久久久精品视频| 日韩精品视频网址| 国产a级一级片| 乱子伦一区二区| 日本999视频| 久久av综合网|