JAVA爬酷狗音乐

先说一下爬取的思路
1,随便打开一首能波的歌播放,找到它的播放地址:
https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash=42447823290E80FD5318E8A195A169DD&album_id=28687022
多播放几首发现只要hash和album_id不同就能播放不同的歌
所以只要找到所有歌的hash和album_id就行了,OK打开开发者模式点这个文件在这里插入图片描述
找到它的头文件点开哈哈哈就包含了hash和album_id
后来发现拿到也没用不是歌曲播放的真实地址,继续找它的歌曲文件的地址终于发现藏在了这个文件下
在这里插入图片描述
把它头文件打开就是歌曲的文件的播放地址且发现在最后面有歌曲的真实播放地址play_backup_url,所以只要改变hash和album_id不就所有歌曲的文件都有了吗

所以总结下来就是
1,打开播放一首歌的开发者模式找到所有歌曲的album_id和hash
2,同样在此开发者模式中找到歌曲的真实播放地址
3,改变不同的hash和album_id就能得到所有歌曲的真实播放地址

思路缕清开始撸代码
1,先模拟浏览器环境,使得能够打开网页得到数据(hash和album_id)

public static String httpGetCallbackData(String url, List<NameValuePair> params) {//1.获取连接客户端工具BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager();CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(connManager).build();//网址返回的json数据。创建一个空的引用。String entityStr = null;//请求  response:响应CloseableHttpResponse response = null;try {URIBuilder uriBuilder = new URIBuilder(url);uriBuilder.setParameters(params);//创建GET请求对象HttpGet httpGet = new HttpGet(uriBuilder.build());RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(50000).setConnectionRequestTimeout(50000).build();httpGet.setConfig(requestConfig);//添加请求头信息httpGet.setHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");//执行请求response = httpclient.execute(httpGet);HttpEntity entity = response.getEntity();//.使用Apache提供的工具类进行转换成字符串entityStr = EntityUtils.toString(entity, "UTF-8");} catch (ClientProtocolException e) {System.err.println("Http协议出现问题");e.printStackTrace();} catch (ParseException e) {System.err.println("解析错误");e.printStackTrace();} catch (URISyntaxException e) {System.err.println("URI解析异常");e.printStackTrace();} catch (IOException e) {System.err.println("IO异常");e.printStackTrace();} finally {// 释放连接if (null != response) {try {response.close();httpclient.close();} catch (IOException e) {System.err.println("释放连接出错:"+e.getMessage());}}}return entityStr;}

这里返回的是字符串,要把它转化为json数据得到album_id和hash
2,通过album_id和hash打开index中头文件的地址得到歌曲真实播放地址play_backup_url

//打开存放歌曲播放地址的页面List<NameValuePair> params2 = new ArrayList<NameValuePair>();params2.add(new BasicNameValuePair("r", "play/getdata"));params2.add(new BasicNameValuePair("hash", filehash));params2.add(new BasicNameValuePair("album_id", String.valueOf(albumid)));String result2= Downmusic.httpGetCallbackData("https://wwwapi.kugou.com/yy/index.php", params2);JSONObject jsonObjectmusci=JSONObject.parseObject(result2);JSONObject jsonObjectmuscidata=jsonObjectmusci.getJSONObject("data");String musicUrl=jsonObjectmuscidata.getString("play_backup_url");

3,得到歌曲的真实播放地址后就可以用流把它下载到磁盘中了

try {URL url = new URL(musicUrl);URLConnection urlconn = url.openConnection();InputStream inputStream = urlconn.getInputStream();int len = 0;byte[] b = new byte[1024*4];OutputStream out = new FileOutputStream("G:\\xxx\\"+songname+".mp3");while ((len = inputStream.read(b)) != -1) {out.write(b, 0, len);}out.close();inputStream.close();System.out.println("下载完成........下载路径是====>"+"G:\\xxx\\"+songname+".mp3");} catch (IOException e) {e.printStackTrace();}

以上就是爬一音乐的所有代码,要爬所有的歌写个循环就轻松搞定

注意:
1.打开图片中的头文件看它的参数有page和pagesize这是页数和该页数中有几首歌,默认是1,30,刚开始得先从爬一首开始所以要把pagesize改为1.
2,再爬的过程中入的大坑,在获取play_backup_url时程序能正常运行,但是返回的结果却是错误的,苦恼我好久终于在网上找到解决方法,就是在模拟浏览器环境时请求头信息是带上Cookie参数且它的参数不为空就行,我也不知道为啥要这样。
3,一段完整的网址放在URL是打不开的需要把后面的人工拼接

效果图:
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫:爬取酷狗音乐榜单中的音乐信息并存储到MySQL(附源码)

目录 具体思路代码部分获取歌曲名称和歌手获取歌曲播放页的url获取音乐下载地址将获取到的音乐信息添加到MySQL中 完整代码 获取酷狗音乐榜单中的音乐信息&#xff0c;这里我以“网络红歌榜”为例 获取榜单中的 “音乐名称”&#xff0c;“歌手”&#xff0c;“音乐下载地址”&…

KeePass CVE-2023-32784:进程内存转储检测

KeePass CVE-2023-32784&#xff1a;进程内存转储检测 KeePass 是一种流行的开源密码管理器&#xff0c;可以在 Windows、Mac 或 Linux 上运行。该漏洞允许从正在运行的进程的内存中以明文形式提取主密钥。主密钥将允许攻击者访问所有存储的凭据 强烈建议更新到KeePass 2.54以…

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

Python爬虫之爬取酷狗音乐歌曲 1.安装第三方库 在Python的语言库中, 分为Python标准库和Python的第三方库. Python标准库是在你安装Python的时候已经包含在了安装目录下, 而Python第三方库需要使用Python的包管理pip来安装. 在本次代码中, 我们需要用到request库. requests翻…

(统计学习方法|李航)第四章 朴素贝叶斯算法——贝叶斯估计

贝叶斯估计方法&#xff1a; 计算男女时只有两个值&#xff0c;所以K2 贝叶斯估计就是拉普拉斯平滑 估计方法&#xff1a;为什么叫做贝叶斯估计呢&#xff1f; 例题&#xff1a; 重新回顾以下朴素贝叶斯&#xff1a; 对他求导&#xff0c;求出最大值 得到了色i他的估计值&…

数据归一化:优化数据处理的必备技巧

文章目录 &#x1f340;引言&#x1f340;数据归一化的概念&#x1f340;数据归一化的应用&#x1f340;数据归一化的注意事项与实践建议&#x1f340;代码演示&#x1f340;在sklearn中使用归一化&#x1f340;结语 &#x1f340;引言 在当今数据驱动的时代&#xff0c;数据的…

制造业为什么要建设数字化供应链

数字化让越来越多的人走向了线上的世界&#xff0c;让那些拥有线上产品或提供线上服务的企业提供了更多流量。 但与此同时&#xff0c;传统制造业遭受了沉重的打击&#xff0c;考虑到防疫要求&#xff0c;很多工厂长期处于人手不足的状态&#xff0c;生产制造效率大幅降低&…

架构设计第八讲:架构 - 理解架构的模式2 (重点)

架构设计第八讲&#xff1a;架构 - 理解架构的模式2 (重点) 本文是架构设计第8讲&#xff1a;架构 - 理解架构的模式2&#xff0c;整理自朱晔的互联网架构实践心得, 他是结合了 微软给出的云架构的一些模式的基础上加入他自己的理解来总结互联网架构中具体的一些模式。我在此基…

设计师常用的几个资源网站,你都知道吗?

如果你是一名设计师&#xff0c;你的电脑上可能存储了很多的设计网站&#xff0c;但是碎玉一些新手小白来说&#xff0c;刚接触设计的时候应该怎样进行绘制呢&#xff1f;难道要自己去一笔一笔的进行绘制吗&#xff1f;下面给大家分享几个设计网站&#xff0c;一起来看看吧&…

设计师常用的几个资源网站分享,再也不用为没有素材发愁

如果你是一名设计师&#xff0c;你的电脑上可能存储了很多的设计网站&#xff0c;但是碎玉一些新手小白来说&#xff0c;刚接触设计的时候应该怎样进行绘制呢&#xff1f;难道要自己去一笔一笔的进行绘制吗&#xff1f;下面给大家分享几个设计网站&#xff0c;一起来看看吧&…

设计师常用的几个资源网站,你都知道几个呢?

如果你是一名设计师&#xff0c;你的电脑上可能存储了很多的设计网站&#xff0c;但是碎玉一些新手小白来说&#xff0c;刚接触设计的时候应该怎样进行绘制呢&#xff1f;难道要自己去一笔一笔的进行绘制吗&#xff1f;下面给大家分享几个设计网站&#xff0c;一起来看看吧&…

Windows下在线图片处理工具

图片处理工具Photopea Photopea是一个在线版的图片编辑器, 与Photoshop的界面非常相似, 经常被人们误以为是Photoshop的在线网页版, Photopea可以满足绝大多数图片修改需求, 更有趣的是, Photopea支持打开Sketch格式,对经常与Sketch打交道的设计师, 非常有诱惑力! 更多介绍 &…

这些开发好工具,你知道几个?

文章目录 这些超级好的软件&#xff0c;你知道吗&#xff1f;&#xff01;文档类Microsoft OfficeWPS OfficeTyporanotepadsublime Text3或2 工具类截图工具&#xff1a;snipaste虚拟机&#xff1a;Oracle VM VirtualBox笔记类&#xff1a;Microsoft OneNote在线大纲&#xff1…

ubuntu虚拟机磁盘压缩:vmware-toolbox-cmd命令实现

压缩之前&#xff0c;虚拟机占用磁盘空间 虚拟机必须已经安装vmware-tool&#xff0c;运行如下命令&#xff0c;参看磁盘的挂载点 sudo /usr/bin/vmware-toolbox-cmd disk list $sudo /usr/bin/vmware-toolbox-cmd disk list [sudo] password for lkmao: Shrink disk is disab…

C++初阶之一篇文章教会你list(理解和使用)

list&#xff08;理解和使用&#xff09; 什么是list特点和优势基本操作示例用法与其他序列式容器&#xff08;如 std::vector 和 std::deque&#xff09;相比&#xff0c;std::list 显著的区别和优势成员类型 list构造函数1. default (1)2. fill (2)3.range (3)4. copy (4) li…

如何学习大数据

文章目录 每日一句正能量前言一、什么是大数据二、大数据的应用领域三、社会对大数据的人才需求四、大数据的学习路线后记 每日一句正能量 多数人认为&#xff0c;一旦达到某个目标&#xff0c;人们就会感到身心舒畅。但问题是你可能永远达不到目标。把快乐建立在还不曾拥有的事…

【雕爷学编程】Arduino动手做(54)---大按键微动按钮模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

华为手机相册怎么镜像翻转_手机视频剪辑软件怎么制作电子相册_

2020年11月09日 10:25 作者&#xff1a;黄页 编辑&#xff1a;黄页 生活中我们经常会利用手机把身边的美好事物拍摄下来&#xff0c;用以记录生活中的点点滴滴。然而你是否想过将这些照片以动态的形式展示给身边的亲朋好友&#xff0c;让图片“动”起来呢?下面就教你手机视频剪…

华为堡垒机_浪潮无线分析,华为云堡垒机

预期结果步骤2在第6次输入错误用户名/密码时&#xff0c;页面无法正常打开&#xff0c;且被测设备有相关日志记录。测试结果口通过口部分通过口未通过口未测试备注4.2.16敏感数据泄密防护项目&#xff1a;Web攻击防护分项目&#xff1a;敏感数据泄密防护用例编号&#xff1a;版…

华为手机设置页面黑色_华为手机微信猫和老鼠主题皮肤怎么设置 ?超个性主题等你来设置!...

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。 …

华为手机大小尺寸一览_超实用!3招教你用华为手机玩转类型学摄影!

怎么样把照片发朋友圈最吸睛&#xff1f; 每个人都有展示图片的喜好和想法 但往往按照系列发一整组照片&#xff0c;容易收获更多点赞 ▼ 像这样我们常看到的系列图&#xff0c;有一个学名 叫做 “摄影类型学” 名字听起来有没有觉得很高级 但是操作起来却并不难 今天我们就来讲…