python歌曲_python抓取并下载音乐歌曲

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("网络连接超时,请重启检测网络通畅性!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVA 1645 - Count(简单DP)

题目链接 https://cn.vjudge.net/problem/UVA-1645 【题意】 输入n&#xff08;n<1000&#xff09;统计有多少个n个结点的有根树&#xff0c;使得每个深度中所有结点的子结点数相同 【思路】 设答案为dp[n]&#xff0c;肯定要拿一个结点作为根&#xff08;第0层&#xff0…

winform窗体

WinForm是Net开发平台中对Windows Form的一种称谓。 中文名 Winform 特 点 功能强大 操作方便 新的数据提供程序管理 使用安全 利用公共语言运行库的安全特性 特点 Windows窗体的一些重要特点如下&#xff1a; 功能强大 Windows窗体可用于设计窗体和可视控件&#xff0c;以创建…

win8配置mysql5.6,win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装

Mysql5&period;5升级到5&period;7后MySQLdb不能正常使用的问题解决ubuntu系统 报错信息1 Type "help", "copyright", "credits" or "license&qu ...Python学习笔记之Beautiful Soup如何在Python3.x中使用Beautiful Soup 1.Beau…

python词频统计结果写入csv_Python词频对比并导入CSV文件

需要用到的停用词库我上传到我的资源了&#xff0c;大家也可以自己去网上找&#xff01;本来是想把两个词频统计放入一个CSV文件中&#xff0c;但是无奈向已经存在的CSV文件中追加写入数据只能在已经存在的数据下面追加&#xff0c;也就是在同一列追加&#xff0c;不能另起一列…

计算公式

公式&#xff1a; 1 网段数2^可变的网络ID位数 2 一个网段中主机数2^主机ID位数&#xff08;32-网络ID位数&#xff09;-2 3 CIDR无类域名路由:网络ID位数不确定&#xff0c;CIDR表示法&#xff1a;IP/网络ID位数 10.0.0.100/8 255.0.0.0 4 网络IDIP与netmask 5 判断目标主机是…

实例3:python

#一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; #假设该数为 x。 #1、则&#xff1a;x 100 n2, x 100 168 m2 #2、计算等式&#xff1a;m2 - n2 (m n)(m - n) 168 #3、设置&…

php word excel,PHP 生成word 和 excel 文档

xmlns"http://www.w3.org/TR/REC-html40">word 中要显示的内容&#xff0c; 由于word支持html格式, 所以中间这一部分使用html文档就可以.?如果做文件下载:?header("Content-type:application/vnd.ms-word");header("Content-Disposition:filena…

实例4:python

#输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f; #!/usr/bin/python -- coding: UTF-8 -- #!/usr/bin/python -- coding: UTF-8 -- yearint(2019) monthint(8) dayint(13) months1[0,31,60,91,121,152,182,213,244,274,305,335,366] #闰年 months2[…

堆排序python代码实现_python实现堆排序

首先理解堆排序&#xff1a;堆&#xff1a;堆栈是计算机的两种最基本的数据结构。堆的特点就是FIFO(first in first out)先进先出&#xff0c;这里的话我觉得可以理解成树的结构。堆在接收数据的时候先接收的数据会被先弹出。栈的特性正好与堆相反&#xff0c;是属于FILO(first…

jq多选框全选,多选

html代码 <input type"hidden" name"f_information_id" id"f_information_id" value"<?php echo $f_information_id?>"> <table class"table table-hover"><thead><tr><th> <inpu…

无人驾驶技术(1)

无人驾驶汽车有望将在未来20年内得到广泛运用&#xff0c;各大科技公司和汽车厂商均在加大对无人驾驶的投入&#xff0c;资本也纷纷抢滩该万亿市场。 无人驾驶汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作&#xff0c;通过电脑实现无人驾驶&#xff0c;可…

php html登陆逻辑,保持演示文稿(HTML)和逻辑(PHP)分开

我试图保持演示和逻辑分离,而不使用像Smarty这样的模板引擎.到目前为止我所做的工作是有效的,但我不知道如果不在我的演示文稿中添加更多PHP而不是我想做的事情.例如,现在我有这样的事情&#xff1a;product_list.phptry {$query $conn->prepare("SELECT p.id,p.name,…

层次分析法matlab_建模开讲课程回放2:层次分析法及其MATLAB

建模开讲&#xff1a;层次分析法及其MATLAB实践主讲人&#xff1a;于晶贤老师课程回放地址如下&#xff0c;大家可以复制链接到地址栏即可观看&#xff0c;也可以直接点击左下角的观看&#xff1a;https://ke.qq.com/webcourse/index.html?fromqqchat&cid493154&term_…

raw input()和input区别

版本差异 raw_input——》python2版本 input——》python3版本 2. 输入格式差异 就是raw_input()随便输都是字符串&#xff0c;而input()必须按照Python的规则来~ raw_input() nameraw_input(‘输入姓名&#xff1a;’) ageraw_input(‘输入年龄’) 我们输入汉字的姓名和数…

防抖debounce和节流throttle

大纲 一、出现缘由 二、什么是防抖debounce和节流throttle 三、应用场景 3.1防抖 3.2节流 一、出现缘由 前端开发中&#xff0c;有一部分用户行为会频繁触发事件&#xff0c;而对于DOM操作&#xff0c;资源加载等耗费性能的处理&#xff0c;很可能导致卡顿&#xff0c;甚至浏览…

不同vlan之间如何ping通_【丰润达.安防百科】如何实现交换机不同VLAN、不同网段之间互访?...

交换机如何实现不同网段的互访&#xff1f;这个交换机完全可以实现&#xff0c;在实际项目中&#xff0c;交换机实现不同网段的互访用的也比较多&#xff0c;那么今天我们一起来看下。▎同一个vlan中&#xff0c;不同网段的主机如何互通同一个vlan&#xff0c;不同网段的主机如…

oracle字段加约束,Oracle数据库的字段约束创建和维护示例

创建Oracle数据库的字段约束&#xff1a;非空约束唯一约束对字段的取值的约束默认值外键约束create table tab_class(class_id number primary key,class_name varchar2(10) not null unique);create table tab_stu(stu_id number,--学生姓名&#xff0c;不能为空&#xff0c;不…

实例5:python

#输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 l [] for i in range(3): x int(input(‘integer:\n’)) l.append(x) l.sort() print (l)

python识别节假日_Python3自动签到 定时任务 判断节假日的实例

不废话&#xff0c;直接上代码Python3.6签到代码&#xff0c;只需修改url&#xff0c;账号&#xff0c;密码即可&#xff0c;此处是登录时无验证登录&#xff0c;有验证码的自行补充# -*- coding:utf-8 -*-import jsonimport urllib.requestimport datetime# 模拟浏览器打开网站…

[BZOJ 5074] 小B的数字

题目传送-BZOJ5074 题意&#xff1a; T组数据 你有一个数组\(A\)&#xff0c;要求一个数组\(B\)\(B\)中的数都是2的正整数次幂。 令\(x\prod_{i1}^nB_i\),有\(x|B_i^{A_i},i\in1,2,3,...,n\)成立\(T \le 10,n \le 100000\) 题解&#xff1a; 首先\(B\)可以直接转化为每个元素的…