python中的英文歌_Python 爬网易音乐云歌曲,MV
业余练习之作,不喜欢也别喷。有错可以赐教。谢谢
import requests
import sys
from bs4 import BeautifulSoup
import json
import urllib
import re
import os
import tkinter as tk
from tkinter import filedialog
header = { #伪造浏览器头部,不然获取不到网易云音乐的页面源代码
'User-Agent':'Mozilla/5.0(Windows NT 6.3;WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/46.0.0.2490.80 Safari/537.36',
'Referer':'
',
}
print("""
************ ************
************ 1. 排行榜 ************
************ 2. 歌 手 ************
************ 3. MV ************
************ 0. 退 出 ************
************ ************
""")
numg=[0,1,2,3]
numg2 = [0,1,2,3,4,5,6]
bdlist = ["19723756","71384707","1978921795","3778678","2250011882","21845217"]
def userinput(content = '请输入选择:',secd = numg):
count =0
while count < 3: #累计输入不超过3次
num = input(content)
if num.isalpha() == 1: #判断是否字符串
print("请正确输入选择项!")
count = count + 1
print('你还有 %s 次机会'%(3-count))
continue
elif not re.search(u'^[_a-zA-Z0-9\u4e00-\u9fa5]+$', num): #判断是否包含非法字符
#\u4e00-\u9fa5是unicode编码,正好是中文编码的开始和的两个值
count = count + 1
print('你还有 %s 次机会'%(3-count))
continue
elif len(num)>1 or int(num) > secd[-1] :#判断长度是否超过1个字符或字符是否包含在预设列表中
count = count + 1
print('你还有 %s 次机会'%(3-count))
continue
elif int(num) in secd:
return num
break
sys.exit()
def gs_input(content = '请输入歌手网址ID:'):
count = 0
while count < 3:
id = input(content)
if not re.search(u'^[0-9]+$', id):
count = count + 1
print('你还有 %s 次机会'%(3-count))
continue
else:
return id
break
sys.exit()
def bdlink(linkid): #榜单地址
return link
def choice_folder():#选择下载文件存放位置
root =tk.Tk()
root.withdraw() #隐藏TK窗口
folderpath = filedialog.askdirectory()
#filepath = filedialog.askopenfilename()
return folderpath
def songget(linaddr):
header = { #伪造浏览器头部,不然获取不到网易云音乐的页面源代码
'User-Agent':'Mozilla/5.0(Windows NT 6.3;WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/46.0.0.2490.80 Safari/537.36',
}
r = requests.get(linaddr, headers = header)#通过requests模块的get方法获取网页数据
html = r.content #获取网页内容
soup = BeautifulSoup(html, "html.parser") #通过BeautifulSoup模块解析网页
songs = soup.find("ul", class_ = "f-hide").select("a", limit = 1) #通过分析网页源代码发现排行榜中的歌曲信息全部放在类名称为f-hide的ul中,于是根据特殊的类名称查找相应ul,然后找到里面的全部a标签,限制数量为10,即排行榜的前200首歌
i = 1 #设置一个自增参数,表示歌曲的数目
for s in songs: #遍历输出数组songs中的内容
maxnum = 5
for tries in range(maxnum): #下载失败尝试5次
song_id = s['href'][9:] #只截取歌曲链接中的ID部分,因为网页中链接的形式为"/song?id=496870798",从=号之后的就是歌曲的ID号
song_name = s.text #获取a标签的文本内容,即上歌曲的名称
#下载歌手歌曲
song_down_link = "网易云音乐" + song_id + ".mp3" #根据歌曲的ID号拼接出下载的链接,歌曲直链获取的方法参考文前的注释部分
print("第 " + str(i) + " 首歌曲:" + song_down_link)
print("请选择要存放的文件夹")
response = requests.get(song_down_link, headers = header).content #亲测必须要加 headers 信息,不然获取不了
f_path = choice_folder() + '\\'
f = open(f_path + song_name + ".mp3", 'wb') #"d:\music\",报错:SyntaxError:EOL while scannig string literal. 如去掉最后的\,则文件名变成MUSICXXX.MP3;加双\后,达成目标。以二进制的形式写入文件中
f.write(response)
f.close()
#以下为下载歌词
url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(song_id) + '&lv=1&kv=1&tv=-1'
htm = requests.post(url,headers=header)
htm2 = htm.text
json_obj = json.loads(htm2)
lyric2 = json_obj['lrc']['lyric']
f_ric = open(f_path + song_name + ".lrc", 'w', encoding = 'utf-8')
f_ric.write(lyric2)
f_ric.close()
print(song_name + ".mp3")
print("下载完成\n\r")
i = i + 1
break
if tries < (maxnum -1):
continue
else:
print("Has tried %d times to acces url %s, all failed!\n\n" %(maxnum,song_down_link + "\n"))
break
num = userinput("输入选择:",numg)
if int(num) ==1:
print('''
######################################################
############## ##############
############## 1. 云音乐说唱榜 ##############
############## 2. 云音乐古典音乐榜 ##############
############## 3. 云音乐电音榜 ##############
############## 4. 云音乐热歌榜 ##############
############## 5. 抖音排行榜 ##############
############## 6. KTV 唛 唠 ##############
############## 0. 退出 ##############
############## ##############
######################################################
''')
num2 = userinput("输入选择:",numg2)
if int(num2) ==1:
urlsr = bdlink(bdlist[0]) #说唱榜
songget(str(urlsr))
elif int(num2) == 2:
urlsr = bdlink(bdlist[1]) #古典音乐
songget(urlsr)
elif int(num2) == 3:
urlsr = bdlink(bdlist[2]) #电音榜
songget(urlsr)
elif int(num2) == 4:
urlsr = bdlink(bdlist[3]) #热歌榜
songget(urlsr)
elif int(num2) == 5:
urlsr = bdlink(bdlist[4]) #抖音排行榜
songget(urlsr)
elif int(num2) == 6:
urlsr = bdlink(bdlist[5]) #KT唛唠
songget(urlsr)
elif int(num2) == 0:
sys.exit()
if int(num) ==2:
gs_id = gs_input()
gs_link = "网易云音乐"%(gs_id)
songget(gs_link)
sys.exit()
if int(num) == 3:
mv_id = gs_input()
url = '网易云音乐' + str(mv_id)
req = requests.get(url, headers = header)
req.encoding='utf-8'
try:
pattern = re.compile(r'',re.S)#re.S(DOTALL): 点任意匹配模式,改变’.’的行为
result = re.findall(pattern ,req.text)[0].strip()
file_name = json.loads(result)['title']
pattern_1 = re.compile(r'&murl=http(.*?(:?&auto))(?!\.)')
pattern2 = re.findall(pattern_1,req.text)
if len(pattern2) == 0:
pattern_1 = re.compile(r'hurl=http(.*?(:?&murl))(?!\.)')
pattern2 = re.findall(pattern_1,req.text)
elif len(pattern2) == 0:
pattern_1 = re.compile(r'hurl=&murl=http(.*?(:?&auto))(?!\.)')
pattern2 = re.findall(pattern_1,req.text)
s = [str(i) for i in pattern2]
s4 = ' '.join(s)
"""一.parse.urlencode() 与parse.unquote()
urllib 和urllib.request都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下:
1.urllib 仅可以接受URL,不能创建 设置了headers 的Request 类实例;
2.但是 urllib 提供 urlencode 方法用来GET查询字符串的产生,而urllib.request 则没有。(这是 urllib 和urllib.request 经常一起使用的主要原因)
3.编码工作使用urllib的parse.urlencode()函数,帮我们将key:value这样的键值对转换成"key=value"这样的字符串,解码工作可以使用urllib的parse.unquote()函数。(注意,不是urllib.request.urlencode() )
"""
url2 = urllib.parse.unquote(s4)
s = url2.split(',')[0]
url3 = s[3:-6]
url4 ="http:" + url3
req2 = requests.get(url4, headers = header)
print("请选择存放位置:")
fpath = choice_folder() + "\\"
f = open(fpath + file_name + ".mp4", 'wb')
f.write(req2.content)
f.close()
print(" \n %s *已成功下载,尽请聆听!\n"%(file_name))
except:
if len(pattern2)<1:
print(file_name + "因版权问题,无法下载\n")
sys.exit()
else:
print("视频不可下载:( 或是出现未知错误")
sys.exit()
sys.exit()
if int(num)== 0:
print('0')
sys.exit()
python中的英文歌_Python 爬网易音乐云歌曲,MV相关推荐
- python中的英文歌_Python告诉你:从《入海》到《消愁》毛不易的歌里都在唱些什么?...
[导语]:今天我们来聊聊--B站联合毛不易发布的毕业季主题曲<入海>,以及背后不一样的毛不易.Python技术部分请看第三部分. Show me data,用数据说话!今天我们聊一聊 毛不 ...
- python读取文本中的英文歌_Python 实例分析 - 获取MP3歌曲的Tag信息
下面利用一个python的实例程序,来学习python.这个程序的目的就是分析出所有MP3文件的Tag信息并输出. 其中遇到一个问题,让我深切感受到python中依靠缩进来控制流程的缺点,不多说,看程 ...
- python里的英文歌_python下载酷狗音乐上的歌曲
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:TM0831 准备工作:Python3.5 Pycharm 使用到的 ...
- python里的英文歌叫什么_Python告诉你:从《入海》到《消愁》毛不易的歌里都在唱些什么?...
原标题:Python告诉你:从<入海>到<消愁>毛不易的歌里都在唱些什么? CDA数据分析师 出品 作者:Mika 数据:真达 后期:泽龙.Mika [导语]:今天我们来聊聊- ...
- python要学什么英文歌_Python分析网易云音乐近5年热门歌单
由于同一歌单可能会有不同的分类,所以按这72种分类抓取的数据会有重复数据,剔重之后6.6万个热门歌单. 我按不同分类下歌单的相似度做了排行榜如下(红色部分表示相似度): 从相似度排行榜中看出流行音乐. ...
- python图片显示英文字符_Python中利用Tesseract软件来识别图片中的英文与中文
OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几 ...
- python网易云歌词做成词云图_Python爬取李荣浩最短歌曲贝贝的网易云评论并做成词云图...
前言 在18 年的 10 月 17 号,李荣浩发了一张新专辑「耳朵」,专辑里有一首歌「贝贝」,只有 4 秒,歌词也就两个字.而且这首歌的作曲 .作词 .编曲.制作人.和声.录音师.混音师.录音室.混音 ...
- python爬去音乐_python爬去音乐
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文为大家分享了python爬取酷狗音乐排行榜的具体代码,供大家参考,具体内容如 ...
- python中chr的用法_python中chr()函数和ord()函数的用法
原博文 2018-06-11 21:52 − 一,chr()函数 格式:Chr(<数值表达式>) 说明:函数返回值类型为String,其数值表达式值取值范围为0~255. 例如:Print ...
最新文章
- cookie 免密登录_python
- Struts2的Action和Servlet有什么联系,区别?
- centos安装python3小白_Centos7 安装Python3
- 网页插件学javascript还是jquery好啊?
- QT的QBluetoothTransferManager类的使用
- 【Nginx】浏览器请求URL遇到错误:no-referrer-when-downgrade
- 输入 3 个正数,判断能否构成一个三角形。
- iOS 网络通信01
- CVPR 2018 最具创意论文 TOP10
- 解决百度富文本框中添加的表格页面获取后不显示表格边框的问题
- 获得Oracle中刚插入的数据的ID(for produce)
- 计算机考研2022大纲,2022计算机408考研大纲
- 为什么谐振时电抗为0_108kVA/108kV/27kV变频串联谐振试验装置
- varchar与varchar2区别
- cd40系列芯片_CD40,CD45系列芯片功能大全
- 微信小程序wx:for 循环中item的keng
- 大数据入门--大数据特点
- [java] POI shiftRows 移动后合并的单元格被拆分了
- SVN服务器迁移方法(Windows环境)
- 基于Spring Security 的Java SaaS应用的权限管理
热门文章
- pg数据库数据量很小但是data目录很大的排查思路
- android+删除相片代码,android删除手机照片
- Kubernetes 管理员认证(CKA)考试笔记(四)
- 华为云服务器默认jdk版本,华为云服务器centos7.3 安装jdk
- 高绩效团队的建设与管理
- 【深度学习】时间注意力模块与空间注意力模块
- bxl文件转换为AD可以用的原理图和PCB库文件
- Windows下LaTex转为Word
- python打包程序在win10不能运行、点击无反应_win10双击安装包没反应,win10运行exe无反应...
- 实验室预约管理系统大型仪器预约平台