仅供参考学习,禁止用于非法用途

目录

1.第三方库准备

安装库
requests selenium webdriver
以及 PhantomJS

2.创建目录

创建主目录Music_Downloader
创建文件 Music_Downloader.py
在同目录下创建包Downloader
在包中创建文件
kugou.py
kuwo.py
wangyiyun.py
QQMusic.py
qianqian.py

类似这样

然后就可以快乐的书写我们的代码了

kugou.py

from urllib.parse import *
import requests
import os
import jsonheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','referer': 'https://www.kugou.com/yy/html/search.html','cookie': 'kg_mid=54466227d384411d3637dfa321b337d6; kg_dfid=1Hvl060iZWHn0cXnq12YuJP5; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1585209276,1585279988,1585380359; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1585380377',
}def get_id(url):r = requests.get(url, headers=headers).textdict = json.loads(r[43:-2])data = dict['data']['lists']names = []hashes = []ids = []for item in data:names.append(item['FileName'].replace('<em>', '').replace('</em>', ''))hashes.append(item['FileHash'])ids.append(item['AlbumID'])return names, hashes, idsdef download_music(name, hash, id):url = f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19108859518011228213_1585286241467&hash={hash}&album_id={id}&dfid=1Hvl060iZWHn0cXnq12YuJP5&mid=54466227d384411d3637dfa321b337d6&platid=4&_=1585286241469'r = requests.get(url, headers=headers).textdict = json.loads(r[41:-2])play_url = dict['data']['play_url']try:with open('%s.mp3' % name, 'wb') as f:f.write(requests.get(play_url).content)print("%s 下载完成" % name)except:passdef Kugou_Downloader():music_name = input("输入你要下载的歌名或歌手>>>")url = f'https://songsearch.kugou.com/song_search_v2?callback=jQuery1124001117916144825526_1585380377159&keyword={quote(music_name)}&page=1&pagesize=10&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1585380377161'if not os.path.exists('。/music'):os.mkdir('./music')os.chdir('./music')print("下载位置:%s" % os.getcwd())names = get_id(url)[0]hashes = get_id(url)[1]ids = get_id(url)[2]for i in range(len(names)):name = names[i]hash = hashes[i]id = ids[i]download_music(name, hash, id)os.chdir('..')

kuwo.py

import requests
from urllib.parse import quote
import json
import osdef get_song_id(url, headers):r = json.loads(requests.get(url, headers=headers).text)data = r['data']['list']singers = []names = []ids = []for item in data:singers.append(item['artist'])names.append(item['name'])ids.append(item['rid'])return singers, names, idsdef download_song(singer, name, rid, headers):url = f'http://www.kuwo.cn/url?format=mp3&rid={rid}&response=url&type=convert_url3&br=128kmp3&from=web&t=1585283715475&reqId={rid}'r = json.loads(requests.get(url, headers=headers).text)video_url = r['url']file = open('%s %s.mp3' % (name, singer), 'wb')file.write(requests.get(video_url).content)file.close()print("%s %s 下载完成" % (name, singer))def Kuwo_Downloader():music_name = input("输入你要下载的歌名或歌手>>>")url = f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={quote(music_name)}&pn=1&rn=10&reqId=23529c50-6fe2-11ea-99be-470e4c105e4c'headers = {'Cookie': '_ga=GA1.2.531172689.1585271847; _gid=GA1.2.1879378667.1585271847; gtoken=P4vBP1VaNQmV; gid=b29e452c-a559-42d9-8b94-f0ec588c2f7c; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1585271847,1585272586,1585272601,1585282753; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1585282753; _gat=1; kw_token=MGLE4XIH6LK','csrf': 'MGLE4XIH6LK','Host': 'www.kuwo.cn','Referer': f'http://www.kuwo.cn/search/list?key={quote(music_name)}','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',}if not os.path.exists('./music'):os.mkdir('./music')os.chdir('./music')print("下载位置:%s" % os.getcwd())singers = get_song_id(url, headers)[0]names = get_song_id(url, headers)[1]ids = get_song_id(url, headers)[2]for i in range(len(singers)):singer = singers[i]name = names[i]id = ids[i]download_song(singer, name, id, headers)os.chdir('..')

wangyiyun.py

from selenium import webdriver
from urllib.parse import quote
import os
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','Referer': 'https://music.163.com/',
}class Wangyiyun_Music:idlist = []namelist = []singerlist = []def __init__(self):self.music_name = input("输入你要下载的歌名或作者>>>")self.url = f'https://music.163.com/#/search/m/?s={quote(self.music_name)}&type=1'def get_song_id(self):self.browser = webdriver.PhantomJS()self.browser.get(self.url)self.browser.switch_to.frame('g_iframe')self.req = self.browser.find_element_by_class_name('srchsongst')self.song_id = self.req.find_elements_by_xpath('.//div[@class="item f-cb h-flag  "]/div[2]//a')for item in self.song_id:Wangyiyun_Music.idlist.append(item.get_attribute('href').split('=')[1])self.song_name = self.req.find_elements_by_xpath('.//div[@class="item f-cb h-flag  "]/div[2]//b')for item in self.song_name:Wangyiyun_Music.namelist.append(item.get_attribute('title'))self.song_singer = self.req.find_elements_by_xpath('.//div[@class="item f-cb h-flag  "]/div[4]//a')for item in self.song_singer:Wangyiyun_Music.singerlist.append(item.text)def download_song(self):Wangyiyun_Music.get_song_id(self)self.base_url = 'http://music.163.com/song/media/outer/url?id={}.mp3'self.video_url = []for item in Wangyiyun_Music.idlist:self.video_url.append(self.base_url.format(item))if not os.path.exists('./music'):os.mkdir('./music')os.chdir('./music')print("下载位置:%s" % os.getcwd())for i in range(len(self.video_url)):try:self.name = Wangyiyun_Music.namelist[i]self.singer = Wangyiyun_Music.singerlist[i]self.video = self.video_url[i]file = open('%s %s.mp3' % (self.name, self.singer), 'wb')file.write(requests.get(self.video, headers=headers).content)file.close()print("%s %s  下载成功" % (self.name, self.singer))except:pass

QQMusic.py

import requests
import os
from urllib.parse import urlencodedef download_QQMusic():headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','referer': 'https://y.qq.com/portal/search.html',}music_name = input("输入要下载的歌名或歌手>>>")data = {'ct': '24','qqmusic_ver': '1298','new_json': '1','remoteplace': 'txt.yqq.song','searchid': '72054918315855694','t': '0','aggr': '1','cr': '1','catZhida': '1','lossless': '0','flag_qc': '0','p': '1','n': '10','w': music_name,'g_tk_new_20200303': '2057904734','g_tk': '2057904734','loginUin': '1571120423','hostUin': '0','format': 'json','inCharset': 'utf8','outCharset': 'utf - 8','notice': '0','platform': 'yqq.json','needNewCode': '0',}base_url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?' + urlencode(data)r = requests.get(base_url, headers=headers).json()song_list = r['data']['song']['list']names = []singers = []midlist = []for item in song_list:names.append(item['title'])midlist.append(item['mid'])singers.append(item['singer'][0]['name'])# ------------------------------------------------------------------------------------------------------purl_list = []for mid in midlist:url = f'https://u.y.qq.com/cgi-bin/musicu.fcg?-=getplaysongvkey6455258874010792&g_tk=2057904734&loginUin=1571120423&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0&data=%7B%22req%22%3A%7B%22module%22%3A%22CDN.SrfCdnDispatchServer%22%2C%22method%22%3A%22GetCdnDispatch%22%2C%22param%22%3A%7B%22guid%22%3A%225916370708%22%2C%22calltype%22%3A0%2C%22userip%22%3A%22%22%7D%7D%2C%22req_0%22%3A%7B%22module%22%3A%22vkey.GetVkeyServer%22%2C%22method%22%3A%22CgiGetVkey%22%2C%22param%22%3A%7B%22guid%22%3A%225916370708%22%2C%22songmid%22%3A%5B%22{mid}%22%5D%2C%22songtype%22%3A%5B0%5D%2C%22uin%22%3A%221571120423%22%2C%22loginflag%22%3A1%2C%22platform%22%3A%2220%22%7D%7D%2C%22comm%22%3A%7B%22uin%22%3A1571120423%2C%22format%22%3A%22json%22%2C%22ct%22%3A24%2C%22cv%22%3A0%7D%7D'response = requests.get(url, headers=headers).json()s = response['req_0']['data']['midurlinfo'][0]['purl']purl_list.append(s)play_url = ['https://isure.stream.qqmusic.qq.com/' + x for x in purl_list]if not os.path.exists('./music'):os.mkdir('./music')os.chdir('./music')print("下载位置:%s" % os.getcwd())for i in range(len(names)):try:name = names[i]singer = singers[i]url = play_url[i]file = open('%s %s.mp3' % (name, singer), 'wb')file.write(requests.get(url, headers=headers).content)file.close()print("%s %s  保存成功" % (name, singer))except:passos.chdir('..')

qianqian.py

import requests
import re
import json
from urllib.parse import *
import osdef get_id(music_name):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36','Host': 'music.taihe.com','Referer': 'http://music.taihe.com/','Cookie': 'BAIDUID=E23486F8F8E78C1989B3691059C374AA:FG=1; u_lo=0; u_id=; u_t=; log_sid=1585711800186E23486F8F8E78C1989B3691059C374AA; Hm_lvt_d0ad46e4afeacf34cd12de4c9b553aa6=1585278402,1585278908,1585711802; tracesrc=-1%7C%7C-1; __qianqian_pop_tt=4; Hm_lpvt_d0ad46e4afeacf34cd12de4c9b553aa6=1585712626',}url = f'http://music.taihe.com/search?key={quote(music_name)}'html = requests.get(url, headers=headers).textreturn re.findall(re.compile(r'\{ "id": "(.*?)" }'), html)def download(id):url = f'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery172036047943074942945_1585711904941&songid={id}&from=web&_=1585711907963'r = requests.get(url).textdata=r[r.index('{'):-2]try:data=json.loads(data)name = data['songinfo']['title']singer = data['songinfo']['compose']play_url = data['bitrate']['file_link']with open("%s %s.mp3"%(name,singer),'wb') as f:f.write(requests.get(play_url).content)print("%s %s 保存完成"%(name,singer))except:passdef qianqian_download():if not os.path.exists('./music'):os.mkdir('./music')os.chdir('./music')music_name = input("输入你要下载的歌名或歌手>>>")print("下载地址 %s"%os.getcwd())for item in get_id(music_name):download(item)os.chdir('..')

Music_Dpwnloader.py

import Downloader.kugou
import Downloader.kuwo
import Downloader.wangyiyun
import Downloader.QQMusic
import Downloader.qianqiandef main():while True:print('''\n请选择下载方式
1:酷狗音乐;
2:酷我音乐;
3:网易云音乐;
4:QQ音乐;
5:千千音乐
(输入q退出程序)''')guess = input("\n请输入下载器(填序号)>>>")if guess == '1':Downloader.kugou.Kugou_Downloader()go = input("继续下载(y/n)").upper()if go == 'Y' or go == 'YES':continueelse:exit("退出")elif guess == '2':Downloader.kuwo.Kuwo_Downloader()go = input("继续下载(y/n)").upper()if go == 'Y' or go == 'YES':continueelse:exit("退出")elif guess == '3':wangyiyunmusic = Downloader.wangyiyun.Wangyiyun_Music()wangyiyunmusic.download_song()go = input("继续下载(y/n)").upper()if go == 'Y' or go == 'YES':continueelse:exit("退出")elif guess == '4':Downloader.QQMusic.download_QQMusic()go = input("继续下载(y/n)").upper()if go == 'Y' or go == 'YES':continueelse:exit("退出")elif guess == '5':Downloader.qianqian.qianqian_download()go = input("继续下载(y/n)").upper()if go == 'Y' or go == 'YES':continueelse:exit("退出")else:exit()if __name__ == '__main__':print("*" * 21 + "音乐下载器" + "*" * 21)main()

本人小白,写的不好请见谅

Python爬虫-音乐下载器相关推荐

  1. 【Python】音乐下载器(for QQ music)

    之前学习Python时,在GitHub上发现这个很有意思的下载器(虽然界面很丑陋hhhh)... 就是现在还不会爬虫,自己不会写(菜哭) 界面是这样的:  这是代码-- # -*- coding: u ...

  2. Python自制音乐下载器,实现听歌自由

    前言 今天发的就是最实用的文章–让你用Python实现听歌自由,不用再担心自己的钱包了 文章末尾名片可直接领取代码 代码实现 导入模块 import os import re from urllib ...

  3. Python爬虫----网页下载器和urllib2模块及对应的实例

    网页下载器:将互联网上URL对应的网页下载到本地的工具,是爬虫的核心组件 urllib2下载网页的三种方法 对应实例代码如下: #coding:utf8import urllib2 url = 'ht ...

  4. python 爬虫 音乐下载 歌手_python爬虫批量下载全民K歌音乐

    标签:爬虫 网址示例: https://node.kg.qq.com/personal?uid=639e9983222a338a 直接上源码: import requests import time ...

  5. 200行Python制作音乐下载器,支持所有主流的平台

    前言 对于自己喜欢的音乐的时候,总想着能下载下来作为自己的铃声,但是有一些歌曲下载的时候是需要收取一些费用的,或者是需要VIP会员的,今天小编教大家用Python下载音乐,支持目前网络上所有主流的音乐 ...

  6. Python GUI:PyQT5+爬虫实现简单音乐下载器

    此文章学习心得:教学视频为B站up主(Python编程语言),视频地址为:https://www.bilibili.com/video/BV1BD4y1S7iP 一部分: 用pyqt5-tool工具生 ...

  7. Python爬虫实战:制作各大音乐平台的聚合的音乐下载器

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python技术,作者 派森酱 转载地址 https://blog ...

  8. python音乐下载器交互界面设计_Python爬虫实战:制作各大音乐平台的聚合的音乐下载器...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python技术,作者 派森酱 转载地址 https://blog ...

  9. 【Python爬虫】爬取网易云音乐,打造音乐下载器

    目录 搭建窗口 爬虫实现下载音乐 歌曲搜索 下载歌曲 绑定命令 生成可执行文件 感想 在前一篇文章,正好总结过了Tkinter以及canvas画布的使用,学以致用,用Tkinter来创建一个窗口,在此 ...

最新文章

  1. HDU 3410 Passing the Message
  2. Akka Cluster原理与应用
  3. .NET Core 3.0之深入源码理解ObjectPool(一)
  4. leetcode79. 24 点游戏
  5. 织梦dedecms5.7二级域名文章图片不显示修改方法.相对路径改为绝对路径的方法...
  6. 全国高等院校英语能力大赛模拟题
  7. IIS 故障一例(XP更新补丁后)
  8. 自主招生认可的英语竞赛有哪些
  9. 淘宝开放平台接口接口,订单R2权限接口淘宝开放平台R2权限,淘宝开放平台进存销应用,top平台接口,淘宝应用市场接口,ERP软件订单接口,淘上淘接口,
  10. 物联网关键技术————传感器技术
  11. 解构给默认值_函数的对象参数的解构和默认值
  12. 【用例设计】接口用例设计
  13. HDU 4544 湫湫系列故事——消灭兔子 (贪心+优先队列)
  14. 视达配色教程8 蓝色的性格是什么样的
  15. 一路走来(1)-我的人生历程
  16. 暨南大学算法期末复习
  17. 在iOS上绘制自然的签名
  18. others-七牛云图床备份
  19. PLC模拟量转化原理及其处理
  20. Windows CE 创建快捷方式

热门文章

  1. 源码分享:基于SpringBoot的ERP系统,自带进销存+财务+生产功能
  2. Linux基础——Ubuntu安装
  3. webpack loader解析及自定义loader
  4. 【濡白的C语言】初学者-从零开始-4(欢喜冤家static与extern)
  5. 浏览器无法支持中文怎么办
  6. 尽情绽放,我的2017!!!
  7. 软件工程08组-第四次作业-猫狗大战挑战赛
  8. java利用Freemarker模板生成docx格式的word文档(全过程)
  9. 计算机学硕305分能调剂到哪,考研必看|最全的历年国家线分析+调剂攻略都在这!...
  10. js 以鼠标为中心缩放图片