java 爬取网页版的酷狗音乐,下载到本地

325 阅读1分钟

小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动

本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金

pom文件所需要引入依赖

    <!-- hutool工具类-->
<dependency>   
<groupId>cn.hutool</groupId>   
<artifactId>hutool-all</artifactId>   
<version>5.3.6</version>
</dependency>
<!--lombok-->
<dependency>  
 <groupId>org.projectlombok</groupId>  
 <artifactId>lombok</artifactId>  
 <optional>true</optional>
</dependency>
<!--阿里巴巴fastJsoupson-->
<dependency>  
 <groupId>com.alibaba</groupId> 
  <artifactId>fastjson</artifactId> 
  <version>1.2.73</version>
</dependency>

java代码实现

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
 
import java.io.*;
import java.net.HttpCookie;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
 
/**
 * 酷狗音乐爬虫
 *
 * @author tarzan 
 * @version 1.0
 * @date 2020/8/6$ 10:30$
 * @since JDK1.8
 */
@Slf4j
public class KuGou {
 
    //视频保存目录
    private static final String videoSavePath="d:/音乐/";
 
    //分享链接(手动修改)
    private static String musicName = "大城小爱";
 
 
    public static void main(String[] args) {
        kgParseUrl(musicName);
    }
 
 
    /**
     * 方法描述: 解析酷狗音乐
     *
     * @param searchName
     * @author tarzan Liu
     * @date 2020年08月06日 18:45:02
     */
    public static void kgParseUrl(String searchName) {
        String url = "https://songsearch.kugou.com/song_search_v2?keyword="+searchName+"&platform=WebFilter";
        String jsonStr=HttpUtil.createGet(url).execute().body();
        List<HttpCookie>  cookies =HttpUtil.createGet(url).execute().getCookies();
        JSONObject json =JSONObject.parseObject(jsonStr);
        String  fileHash= json.getJSONObject("data").getJSONArray("lists").getJSONObject(0).getString("FileHash");
        String  audioName= json.getJSONObject("data").getJSONArray("lists").getJSONObject(0).getString("FileName");
        String songUrl = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash="+fileHash+"&mid=1";
        String  jsonStr1= HttpUtil.createGet(songUrl).execute().body();
        JSONObject json1 =JSONObject.parseObject(jsonStr1);
        String  playUrl= json1.getJSONObject("data").getString("play_url");
         log.info("\n-----音频下载地址-----\n"+playUrl);
        downLoad(playUrl,audioName,"酷狗");
    }
 
 
    /**
     * 方法描述: 视频文件下载
     *
     * @param httpUrl
     * @param title
     * @param source
     * @author tarzan Liu
     * @date 2020年08月06日 18:45:44
     */
    public static void downLoad(String httpUrl,String title,String source) {
        String fileAddress = videoSavePath+"/"+source+"/"+title+".mp4";
        int byteRead;
        try {
            URL url = new URL(httpUrl);
            //获取链接
            URLConnection conn = url.openConnection();
            //输入流
            InputStream inStream = conn.getInputStream();
            //封装一个保存文件的路径对象
            File fileSavePath = new File(fileAddress);
            //注:如果保存文件夹不存在,那么则创建该文件夹
            File fileParent = fileSavePath.getParentFile();
            if(!fileParent.exists()){
                fileParent.mkdirs();
            }
            //写入文件
            FileOutputStream fs = new FileOutputStream(fileSavePath);
            byte[] buffer = new byte[1024];
            while ((byteRead = inStream.read(buffer)) != -1) {
                fs.write(buffer, 0, byteRead);
            }
            inStream.close();
            fs.close();
           log.info("\n-----音频保存路径-----\n"+fileSavePath.getAbsolutePath());
        } catch (FileNotFoundException e) {
            log.error(e.getMessage());
        } catch (IOException e) {
            log.error(e.getMessage());
        }
    }
}