用python爬取网易云音乐,python3爬取网易云歌曲
自制音乐搜索引擎的思路也很直观,就是利用第三方的接口,可以直接向服务器发出请求,然后对获取的数据进行分析保存。以最近流行的歌曲《碧兰姐姐和朱砂痣》下载为例:
分析的结果如上。得到的数据格式是json类型,除了歌名,还要有音乐平台。源代码实现如下:
导入请求导入jsonpathhimport OS 1。网址2。模拟浏览器请求3。解析网页源代码4。保存数据 def song _ download (URL,标题,作者):#创建文件夹os.makedirs(music ,Exist _ ok=true)path= music \ { } . MP3 。格式(标题)打印(歌曲:{0}-{1},正在下载.。格式(标题,作者))#下载(这种读写文件的下载方式适合下载几个文件)content=requests.get (url)。open (file=title author .mp3 ,Mode= wb )为f: f.write (content) print(下载完成,{0}-{1},请尝试。format(title,Author))def get_music_name(): 搜索歌名:return: name=input(请输入歌名:)print(1 .网易云:网易\n2。QQ:qq\n3。酷狗:酷狗\n4。凉我:)6。Himalaya:ximalaya )platform=input(输入音乐平台的类型:)print(- headers={ user-agent : Mozilla/5.0(Windows NT 10.0;Win64X64) Apple WebKit/537.36 (khtml,像壁虎一样)Chrome/87 . 0 . 4280 . 141 Safari/537.36 ,#判断请求是异步还是同步 x-requested-with : XMLHttpRequest ,} param={ input:name, filter:name , type :platform rom, page: 1,} res=requests.post(url=url,data=param,headers=headers)JSON _ text=RES . JSON()title.title )author=JSON path . JSON path(JSON _ text, $.author )URL=JSON path . JSON path(JSON _ text, $.url) if title: songs=list(zip(标题,作者,url)) for s in songs: print(s[0],s[1],S[2])print(-)if _ _ name _ _== _ _ main _ _ :get _ music _ name()演示一下运行效果:
那么相应的song.mp3文件就会出现在文件下面。
而且每次的歌曲检索都是在PyCharm专业版的控制台中进行的,所以用户体验很不好。所以,针对以上两个问题,我改进了源代码。
# 导入模块从tkinter导入*导入请求导入jsonpath从URL lib导入OS。请求导入URL检索# 2 .功能实现“1 .网址2 .模拟浏览器请求3.解析网页源代码4.保存数据 定义歌曲_下载(网址,标题,作者):#创建文件夹os.makedirs(music ,exist _ ok=True)path= music \ { }。MP3 .格式(标题)文本。插入(结束,歌曲:{0}-{1},正在下载.。格式(标题、作者))#文本框滑动text.see(END) #更新text.update() #下载urlretrieve(url,path) text.insert(END,下载完毕,{0}-{1},请试听。格式(标题、作者))#文本框滑动text.see(END) #更新text.update()def get_music_name(): 搜索歌曲名称:return:“”name=entry。get()平台rom=var。get()# name=碧蓝的学姐与朱砂痣URL= https://音乐。柳志进。cn/ headers={ user-agent : Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/87。0 .4280 .141 Safari/537.36 ,#判断请求是异步还是同步x-requested-with : XMLHttpRequest ,} param={ input:name, filter:name , type :platform, page: 1,} res=requests.post(url=url,data=param,headers=headers)JSON _ text=RES . JSON()title=JSON path。JSON路径(JSON _ text, $.title’)author=JSON路径。JSON路径(JSON _ text, $.author’)URL=JSON路径。JSON路径(JSON _ text, $.url )打印(标题,作者,网址)歌曲_下载(网址[0],标题[0],作者[0])# 1。用户界面# 创建画板root=Tk()#设置窗口标题root.title(全网音乐下载器)# 设置窗口大小以及出现的位置根。几何( 560 x450 400 200 )#标签组件label=Label(root,text=请输入下载的歌曲:,font=(楷体,20))# 定位与布局label.grid(row=0)#输入框组件entry=Entry(root,font=(宋体20))entry.grid(行=0,列=1)#单选按钮var=string var()R1=单选按钮(root,text=网易云,variable=var,value=netease)r1.grid(row=1,column=0)r2=Radiobutton(root,text=QQ ,variable=var,value=qq)r2.grid(row=1,column=1)#列表框text=Listbox(root,font=(楷体,16),宽度=50,高度=15)text.grid(row=2,columnspan=2)#下载按钮button1=Button(root,text=开始下载,font=(楷体,15),command=get _ music _ name)按钮1。grid(row=3,column=0)button2=Button(root,text=退出程序,font=(楷体,15),command=root。退出)按钮2。网格(行=3,列=1)#显示界面root.mainloop()#如何将。巴拉圭代码打包成。可执行程序的扩展名文件我们再来看看效果吧
这样加上了用户界面界面和部分代码优化之后,就可以通过。巴拉圭代码打包成。可执行程序的扩展名文件发布给用户使用了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。