import requests

import json

import os

class My_Music():

def __init__(self):

print("*"*25+"音乐抓取器"+"*"*25)

key_name = input('*请输入你要查找的歌曲名称*:')

num = input('*请输入你要查看歌曲列表第几页*:')

self.headers = {

"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"

}

self.headers2 = {

"Accept": "application/json, text/plain, */*",

"Accept-Encoding": "gzip, deflate",

"Accept-Language": "zh-CN,zh;q=0.9",

"Connection": "keep-alive",

"Cookie": "_ga=GA1.2.1217877481.1602902461; h5Uuid=d48c2935f62740f1a5fb2a98c8a5c8-77; _gid=GA1.2.1687724501.1603190279; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602902462,1602923878,1603190279; uname3=%5EO%5E; t3kwid=225768453; userid=225768453; websid=1015091557; pic3=\"http://q.qlogo.cn/qqapp/100243533/90AF896B7270476F63C06DE71F6BFCA4/100\"; t3=qq; _gat=1; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1603190370; kw_token=PLSZIEEDJSK",

"csrf": "PLSZIEEDJSK",

"Host": "www.kuwo.cn",

"Referer": "http://www.kuwo.cn/search/list?key=%E6%B8%B8%E5%B1%B1%E6%81%8B",

"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",

}

self.headers1 = {

"Accept": "*/*",

"Accept-Encoding": "identity;q=1, *;q=0",

"Accept-Language": "zh-CN,zh;q=0.9",

"Connection": "keep-alive",

"Cookie": "_ga=GA1.2.1217877481.1602902461; h5Uuid=d48c2935f62740f1a5fb2a98c8a5c8-77; _gid=GA1.2.1687724501.1603190279; uname3=%5EO%5E; t3kwid=225768453; userid=225768453; websid=1015091557; pic3=\"http://q.qlogo.cn/qqapp/100243533/90AF896B7270476F63C06DE71F6BFCA4/100\"; t3=qq; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602902462,1602923878,1603190279,1603192339; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1603192422",

"Host": "ey-sycdn.kuwo.cn",

"If-None-Match": "\"5f3faedb-350ce7\"",

"Range": "bytes=3145728-3476710",

"Referer": "https://ey-sycdn.kuwo.cn/15a6818d99191a29bc2ced51da173052/5f8ec8bc/resource/n3/65/71/2640215188.mp3",

"Sec-Fetch-Dest": "video",

"Sec-Fetch-Mode": "no-cors",

"Sec-Fetch-Site": "\"same-origin\"",

"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",

}

#

self.url1 = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1603196093062&httpsStatus=1&reqId=dbd3f971-12cd-11eb-984f-451e90d80fbc"

# api

self.url2 = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=30&httpsStatus=1&reqId=da11ad51-d211-11ea-b197-8bff3b9f83d2e'.format(

key_name, num)

# 保存歌曲的数量

self.music_list = []

# 放置所有歌手人名

self.all_singers = []

# 放置歌曲名字

self.names = []

# 放置所有rid,rid是网页所需参数

self.all_rid = []

def get_response(self, url, headers, code=True):

response = requests.get(url=url, headers=headers)

if code == True:

return json.loads(response.content.decode())

elif code == False:

response = requests.get(url=url, headers=headers)

return response.content

def json_html(self, jos_html, code=True):

if code == True:

with open("josn文件.json", "w") as f:

f.write(json.dumps(jos_html, ensure_ascii=False, indent=4))

else:

with open("歌曲.mp3", "wb") as f:

f.write(jos_html)

def music_lists(self, music_list):

a = 0

for music in music_list:

#保存歌曲的数量

self.music_list.append(music)

#放置所有歌手人名

self.all_singers.append(music["artist"])

a += 1

# 放置歌曲名字

self.names.append(str(a)+" "+music["name"])

# 放置所有rid,rid是网页所需参数

self.all_rid.append(music["musicrid"].split("_")[-1])

return self.music_list, self.all_singers, self.names, self.all_rid

def get_song_url(self, name, singers, all_rid):

infs = dict(zip(name, singers))

infs = json.dumps(infs, ensure_ascii=False, indent=0, separators=(',', ':'))

infs = infs.replace('"', ' ')

infs = infs.replace(':', '——————')

print(infs.split("{")[-1].split("}")[0].replace(",", ""))

order = int(input("*请输入歌曲前的序号*:"))

order -= 1

musicrid = all_rid[order]

url = self.url1.format(musicrid)

music_url = self.get_response(url, self.headers2)

return music_url, order

def music_song(self, song ,file_names, singers):

self.file()

name = str(file_names)+"---"+str(singers)

file_name = "歌曲库//"+name.split(" ")[-1]+".mp3"

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

f.write(song)

print(file_name.split("//")[-1],"下载保存成功!")

def file(self):

"""判断当前文件是否存在"""

path = "歌曲库"

if not os.path.exists(path):

os.mkdir(path)

print(path.split("/")[-1], ":创建成功")

def run(self):

music_json = self.get_response(self.url2, self.headers2)

# 保存json文件 方便查看

self.json_html(music_json)

music_list = music_json["data"]["list"]

print("当前页面有", len(music_list), "支歌曲:")

content, singers, name, all_rid= self.music_lists(music_list)

music_url, orid = self.get_song_url(name, singers, all_rid)

song = music_url["url"]

singer = self.get_response(song, self.headers, code=False)

self.music_song(singer, name[int(orid)], singers[int(orid)])

if __name__ == '__main__':

while True:

try:

music = My_Music()

music.run()

except ValueError:

print("歌曲下载错误,歌曲序号请输入整数!")

except requests.exceptions.ConnectionError:

print("网络连接错误,请检查网络连接!")

print("程序退出")

break

except Exception as f:

print("网络连接超时,请重启检测网络通畅性!")

python歌曲_python抓取并下载音乐歌曲相关推荐

  1. Python爬虫之爬取酷狗音乐歌曲

    Python爬虫之爬取酷狗音乐歌曲 1.安装第三方库 在Python的语言库中, 分为Python标准库和Python的第三方库. Python标准库是在你安装Python的时候已经包含在了安装目录下 ...

  2. python爬取歌曲_python爬取网易云音乐热歌榜实例代码

    首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我 ...

  3. python音乐的数据抓取与分析_python抓取网易云音乐热评做词图数据分析

    最近就有一部"怀旧"题材的电影,未播先火,那就是刘若英的处女作--<后来的我们>.青春,爱情,梦想,一直是"怀旧"题材的核心要素,虽然电影现在还未上 ...

  4. 如何用Python网络爬虫爬取网易云音乐歌曲

    今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...

  5. python爬取歌词_利用Python网络爬虫抓取网易云音乐歌词

    今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本地 ...

  6. 抓取网易云音乐歌曲热门评论生成词云(转)

    非原创作品,转载自:http://blog.csdn.net/marksinoberg/article/details/70809830 前言 网易云音乐一直是我向往的"神坛",听 ...

  7. python成都_Python抓取成都房价信息

    Python里scrapy爬虫 scrapy爬虫,正好最近成都房价涨的厉害,于是想着去网上抓抓成都最近的房价情况,顺便了解一下,毕竟咱是成都人,得看看这成都的房子我以后买的起不~ 话不多说,进入正题: ...

  8. python段子_Python抓取段子的爬虫

    问题导读 1.Python抓取段子的爬虫的需求是什么? 2.Python抓取段子的爬虫是如何实现的? 3.你认为该如何实现? 1.需求按下回车键,显示一个段子,要求显示段子的作者.点赞数.评论数.顶等 ...

  9. python爬歌词_python爬虫抓取某易云音乐歌词,从此不在下载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:企鹅号小编 ( 想要学习Python?Python学习 ...

最新文章

  1. 2020斐讯k3刷什么固件_斐讯K2/K3/K2P等路由器搭建收费wifi集成教程
  2. Python3学习笔记:使用代理访问url地址
  3. php ci cookie使用,CI框架实现cookie登陆的方法详解
  4. spark mysql 交互_Spark - 直接操作数据源 MySQL
  5. 递增三元组蓝桥杯c语言,蓝桥-递增三元组-蓝桥
  6. 学会这6个强大的CSS选择器,将真正帮你写出干净的CSS代码!
  7. linux监听apache代码,linux系统使用python监控apache服务器进程脚本分享
  8. 如何找出当前占用磁盘io 最多的进程 - linux,如何找出当前占用磁盘IO最多的进程...
  9. 南邮物联网学院计算机考研,研友分享南京邮电大学物联网学院两个专业的一点看法...
  10. redis 报错 Failed to start Advanced key-value store.
  11. Opera GX:什么是“游戏浏览器”?
  12. 《计算机工程》投稿过程
  13. 【ElectronJs】基于Electron Forge打包的一些问题汇总
  14. 编程之美---数字之魅
  15. 新增数学与人工智能学部,考数据结构!齐鲁工业大学(山东省科学院)计算机考研...
  16. 交换机(三层)接入层、汇聚层和核心层交换机的特点
  17. 慎用manifest
  18. Quartz任务调度器详解
  19. Arduino播放声音
  20. win_server_2008x64升级powershell到4.0

热门文章

  1. 迅雷100万G离线空间免费了,快来抢啦,再也不用担心流量不够了
  2. SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)
  3. 哥德巴赫猜想c 语言,c++验证哥德巴赫猜想
  4. ATA iSpec 2300:第一章 简介
  5. java判断方法是否存在_java判断文件是否存在的方法
  6. [教程]HTC G17(EVO 3D)刷Root教程
  7. 健身和不健身_健身应用应该具备什么?
  8. Android MTK 音频通道修改
  9. 分区文件系统FAT文件系统
  10. (29)打鸡儿教你Vue.js