HttpClient 实现酷狗 Top500 音乐下载

使用java的HttpClient实现酷狗音乐Top500歌曲的下载

  1. 歌单URL
    https://www.kugou.com/yy/rank/home/1-8888.html?from=rank

访问这个URL可以看到 22 条歌曲列表,把 1-8888 改成 2-8888 就可以看到下 22 首

  1. 点一首歌进入播放页,然后打开谷歌浏览器控制台,在页面源码搜索mp3,就可以找到歌曲播放URL
    在这里插入图片描述

但是用代码抓取的时候,返回源码中是没有这个MP3地址的,那肯定是因为网站使用了JS来加载MP3链接。
于是我们刷新页面,看看是哪个请求的响应中包含了这个MP3链接。
最终在

https://wwwapi.kugou.com/yy/index.php?r=play/getdata
&callback=jQuery19103526571885218994_1559220496485
&hash=448A90C4561C32FEC965970C9F401411
&album_id=10852208
&dfid=2lP8VL1Bb0DP09ymCH4Wx9F0
&mid=9517924789f90af8e2d59c827583cdd2
&platid=4
&_=1559220496486

这个请求的响应中找到了MP3链接
在这里插入图片描述

我们把它复制到浏览器的地址栏中进行请求
在这里插入图片描述

可以正常进行播放。

抓取步骤:

  1. 访问歌单页
  2. 找到歌单列表,找到每首歌的播放页面URL进行请求
  3. 在响应中找到hash值(通过hash值确定是哪首歌)

var dataFromSmarty = [{“hash”:“448A90C4561C32FEC965970C9F401411”,
“timelength”:“204002”,
“audio_name”:"\u674e\u4e3d - \u6070\u6070\u76f8\u53cd",
“author_name”:"\u674e\u4e3d",
“song_name”:"\u6070\u6070\u76f8\u53cd",
“album_id”:0}],//当前页面歌曲信息
playType = “search_single”;//当前播放

4.将hash值填充到获取MP3链接的URL中,进行请求
5.获取到这首歌的MP3链接,进行下载,存储,抓取完成
在这里插入图片描述
实现代码:

package kugouspider;

import net.sf.json.JSONObject;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static kugouspider.Parse.parseTitleAndPlayurl;

/**
 * 抓取类
 */
public class Crawler {
   

    private static Log log = LogFactory.getLog(Crawler.class);

    // 保存歌单的路径
    public static String DOWNLOAD_FILEPATH = "I:\\Java\\6_project\\KuGouSpider\\music\\";
    // 歌单链接. 通过改变PAGE来获取下一页的内容
    public static String MUSICLIST_LINK = "https://www.kugou.com/yy/rank/home/PAGE-8888.html?from=rank";
    // 获取MP3链接的请求URL
    public static String MP3_LINK = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata" +
            "&callback=jQuery19103526571885218994_TIME01" +
            "&hash=HASH" +
            "&album_id=10852208" +
            "&dfid=2lP8VL1Bb0DP09ymCH4Wx9F0" +
            "&mid=9517924789f90af8e2d59c827583cdd2" +
            "&platid=4" +
            "&_=TIME02";

    public static void test() {
   
        String title = "陈雪凝 - 你的酒馆对我打了烊";
        String playHref = "https://www.kugou.com/song/tlk6517.html";
        downLoad(title, playHref);
    }

    public static void main(String[] args) {
   
        for (int i = 4; i <= 4; i++) {
   
            // 把PAGE用i替换,以获取每一页的内容
            // https://www.kugou.com/yy/rank/home/1-8888.html?from=rank 就是第一页歌单
            String link = MUSICLIST_LINK.replace("PAGE", i + "");
            String content = getMusicList(link);
          
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值