从Apple 播客预览下载音乐到本地目录

分为三个步骤

  1. 收集<audio>标签

  1. 将标签数据转换为JSON格式

  1. 下载到本地目录

package com.zb.test;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.compress.utils.Lists;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DownloadExample {

    public static void main(String[] args) throws Exception {
        //1 收集<audio>标签
        String html = "<audio title=\"平凡的咖啡音乐\" src=\"https://audio.xmcdn.com/storages/67dd-audiofreehighqps/34/1D/GKwRIRwHlEXtAda-PgHrZIsc.m4a\"></audio>";

        //转换为JSON格式
        List<JSONObject> jsonObjects = ConvertToJSONFormat(html);

        //下载到本地
        for (JSONObject jsonObject : jsonObjects) {
            download(jsonObject.getString("src"), jsonObject.getString("title"));
        }
    }

    public static List<JSONObject> ConvertToJSONFormat(String html) throws Exception {
        String[] split = html.split("\\n");
        List<JSONObject> jsonObjects = Lists.newArrayList();
        for (String s : split) {
            // Remove all backslashes
            s = s.replace("\\", "");

            // Extract attributes from audio element
            String title = s.substring(s.indexOf("title=\"") + 7, s.indexOf("\" src"));
            String src = s.substring(s.indexOf("src=\"") + 5, s.indexOf("\"></audio"));

            // Create JSON object with attributes
            JSONObject json = new JSONObject();
            json.put("title", title);
            json.put("src", extractLink(src));// 提取link
            jsonObjects.add(json);
        }
        return jsonObjects;
    }

    public static String extractLink(String input) {

        // 使用正则表达式匹配字符串
        Pattern pattern = Pattern.compile("jt=(.*)");
        Matcher matcher = pattern.matcher(input);

        // 如果匹配成功,则输出结果
        String result = null;
        if (matcher.find()) {
            result = matcher.group(1);
        }
        return result;
    }

    public static void download(String urlString, String filename) throws Exception {
        String directory = "/Users/kafeih/Downloads";
        String extension = ".m4a";

        URL url = new URL(urlString);
        URLConnection connection = url.openConnection();
        InputStream inputStream = connection.getInputStream();

        Path file = Paths.get(directory, filename + extension);
        FileOutputStream outputStream = new FileOutputStream(file.toFile());

        byte[] buffer = new byte[4096];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }

        inputStream.close();
        outputStream.close();
        System.out.println("Download complete!");
    }
    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,下面是一个简单的 Python 爬虫实现,可以爬取酷狗音乐下载到本地。 ```python import requests import os # 搜索歌曲的 API search_url = 'http://songsearch.kugou.com/song_search_v2' # 获取歌曲的放地址和信息的 API play_url = 'http://www.kugou.com/yy/index.php' # 下载歌曲的 API download_url = 'http://www.kugou.com/yy/index.php?r=play/getdata' # 定义请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36' } # 定义搜索歌曲的函数 def search_song(keyword): # 构造请求参数 params = { 'keyword': keyword, 'page': 1, 'pagesize': 30, } # 发送请求 response = requests.get(search_url, params=params, headers=headers) # 获取搜索结果 result = response.json() # 解析搜索结果,获取歌曲ID和Hash值 song_id = result['data']['lists'][0]['SongID'] hash_value = result['data']['lists'][0]['FileHash'] # 返回歌曲ID和Hash值 return song_id, hash_value # 定义获取歌曲放地址和信息的函数 def get_song_info(song_id, hash_value): # 构造请求参数 params = { 'r': 'play/getdata', 'hash': hash_value, 'mid': '42c9c3f9f0e8e8d8a1e6f2cceddbf5b6', 'platid': 4, } # 发送请求 response = requests.get(play_url, params=params, headers=headers) # 获取响应结果 result = response.json() # 解析响应结果,获取歌曲的放地址和信息 play_url = result['data']['play_url'] song_name = result['data']['audio_name'] singer_name = result['data']['author_name'] # 返回歌曲的放地址和信息 return play_url, song_name, singer_name # 定义下载歌曲的函数 def download_song(play_url, song_name): # 发送请求,获取文件流 response = requests.get(play_url, headers=headers, stream=True) # 获取文件大小 file_size = int(response.headers['Content-Length']) # 打印提示信息 print('正在下载:{},文件大小:{:.2f} MB'.format(song_name, file_size / 1024 / 1024)) # 创建文件夹 if not os.path.exists('songs'): os.mkdir('songs') # 拼接文件路径 file_path = os.path.join('songs', song_name + '.mp3') # 写入文件 with open(file_path, 'wb') as f: for chunk in response.iter_content(chunk_size=1024): f.write(chunk) # 打印提示信息 print('下载完成!') # 主函数 if __name__ == '__main__': # 输入歌曲名 keyword = input('请输入歌曲名称:') # 搜索歌曲 song_id, hash_value = search_song(keyword) # 获取歌曲的放地址和信息 play_url, song_name, singer_name = get_song_info(song_id, hash_value) # 下载歌曲 download_song(play_url, song_name + '-' + singer_name) ``` 这个爬虫程序需要使用到 requests 库,如果没有安装的话,可以通过 pip 安装: ```python pip install requests ``` 运行程序后,输入歌曲名称,程序会自动搜索歌曲并下载到本地。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddie_920

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值