“朝鲜艺术”网站的音频和歌词图片下载方法

“朝鲜艺术(조선예술)”网站提供了大量朝鲜音乐和相关资料。然而,该网站不提供直观的下载链接。本文将介绍如何进行单曲下载,或使用 Python 脚本批量下载该网站的音频文件和歌词图片。

中文介绍视频

单曲下载方式

通过在浏览器开发者工具中找到歌曲对应的响应,并从中找到相关链接。

  • 首先在网站“F12”打开浏览器开发者工具,在顶部活动栏选择“网络(Network)”。

    打开“网络(Network)”工具

  • 选择想要下载的歌曲,注意左下角的歌曲ID,在“网络(Network)”工具中找到“select_music”开头的这条信息,点击,选择“响应(Respond)”,复制其中的文本。

    找到“响应(Respond)”

  • 在随便一个文本编辑器中粘贴这个文本,格式化后的json文本类似于下面:

    点击展开“响应”文本
      {
          "result_article": [
              {
                  "id": "4879",
                  "videoDownFlag": "0",
                  "class_kind": "1",
                  "subtitle": "",
                  "article_title": "  \uc0ac\ub791\uc740 \uc2ec\uc7a5\uc758 \ub178\ub798",
                  "article_short": "  ",
                  "article_cont": "  ",
                  "write_author": "",
                  "compose_author": "",
                  "pub_year": "",
                  "art_group": "0",
                  "favor": "0",
                  "timer": "",
                  "lang_kind": "1",
                  "kind": "33",
                  "view_type": "0",
                  "display_none": "0",
                  "created_at": "2025-11-24 02:19:05",
                  "updated_at": "2025-11-24 02:19:05",
                  "del_flag": "0",
                  "sort_num": "0",
                  "new_data": "0",
                  "first_page_view": "0",
                  "famous": "0"
              }
          ],
          "result": [
              {
                  "id": "15440",
                  "article_id": "4879",
                  "article_kind": "33",
                  "file_title": "  ",
                  "file_short": "  ",
                  "file_hash": "1d64629377cf6072022a58f096bd87af6bca69bfc5990ae8590bf50586dbbf6b",
                  "filename_origin": "\uc0ac\ub791\uc740_\uc2ec\uc7a5\uc758_\ub178\ub798.jpg",
                  "file_name": "02dbed1a35e5f940bd6506cc561c9717.jpg",
                  "file_size": "50.38",
                  "file_path": "uploads\/stage_articles\/33\/02dbed1a35e5f940bd6506cc561c9717.jpg",
                  "file_ext": ".jpg",
                  "file_type": "1",
                  "file_type2": "image\/jpeg",
                  "img_type": "2",
                  "kind": "0",
                  "main_page": "0",
                  "created_at": "2025-11-24 02:19:55",
                  "updated_at": "2025-11-24 02:19:55",
                  "del_flag": "0",
                  "sort_num": "0"
              },
              {
                  "id": "15460",
                  "article_id": "4879",
                  "article_kind": "33",
                  "file_title": "",
                  "file_short": "",
                  "file_hash": "265149c5ccdf30f352d5c28a8709fcb97bedc83c4cffa39df76ec30c1b091213",
                  "filename_origin": "\uc0ac\ub791\uc740_\uc2ec\uc7a5\uc758_\ub178\ub798.jpg",
                  "file_name": "0602c9f911ab4536659ccc2794e64223.jpg",
                  "file_size": "298.44",
                  "file_path": "uploads\/stage_articles\/33\/0602c9f911ab4536659ccc2794e64223.jpg",
                  "file_ext": ".jpg",
                  "file_type": "1",
                  "file_type2": "image\/jpeg",
                  "img_type": "1",
                  "kind": "0",
                  "main_page": "0",
                  "created_at": "2025-11-24 02:20:24",
                  "updated_at": "2025-11-24 02:20:24",
                  "del_flag": "0",
                  "sort_num": "0"
              },
              {
                  "id": "15480",
                  "article_id": "4879",
                  "article_kind": "33",
                  "file_title": "",
                  "file_short": "",
                  "file_hash": "3935b0195c44a192bde203d6ab9202d4004b09c3e54d65299be6e9a847bd615a",
                  "filename_origin": "\uc0ac\ub791\uc740_\uc2ec\uc7a5\uc758_\ub178\ub798.mp3",
                  "file_name": "54de613c1b11b6ba9aa27ce4a5755806.mp3",
                  "file_size": "6199.08",
                  "file_path": "uploads\/stage_articles\/33\/54de613c1b11b6ba9aa27ce4a5755806.mp3",
                  "file_ext": ".mp3",
                  "file_type": "4",
                  "file_type2": "audio\/mpeg",
                  "img_type": "0",
                  "kind": "0",
                  "main_page": "0",
                  "created_at": "2025-11-24 02:20:54",
                  "updated_at": "2025-11-24 02:20:54",
                  "del_flag": "0",
                  "sort_num": "0"
              }
          ]
      }
      ```
      
    

    result中的两个jpeg图片,一般一张是封面图,一张是曲谱,file_size较大的一般是曲谱。mp3即为歌曲音频。

  • file_path复制到浏览器地址栏,删去其中的反斜杠\,前面加上网站域名http://www.korart.sca.kp/,即相应曲谱图片和音频mp3文件的下载链接。

    • 例如这里的mp3链接即http://www.korart.sca.kp/uploads/stage_articles/33/54de613c1b11b6ba9aa27ce4a5755806.mp3

批量下载方式

使用下面的Python脚本,可以批量下载指定ID范围内的音频文件和歌词图片。请确保你已经安装了requests库,并且系统中有curl命令可用。(该代码通过AI生成)

点击展开Python脚本
import os
import requests
import subprocess

# 设置下载文件夹
save_dir = "./downloads"
os.makedirs(save_dir, exist_ok=True)

# 日志文件路径
log_file = os.path.join(save_dir, "log.txt")

# 配置请求头
headers = {
    "Referer": "http://www.korart.sca.kp/index.php/stage/productions?p=1&class=1&famous=0&language=korean",
    "Cookie": "csrf_cookie_name=eb0c308648f337ec4baa71f0daf872d8; PHPSESSID=bn6ru1clfdo4988j3bp105av22",
    "User-Agent": "Mozilla/5.0",
    "X-Requested-With": "XMLHttpRequest",
}

# 基础 URL
base_url = "http://www.korart.sca.kp/"
api_url = base_url + "index.php/stage/select_music"

def download_with_curl(url, output_path):
    print(f"📥 Downloading to {output_path} ...")
    try:
        subprocess.run([
            "curl", "-L", "--retry", "3", "--progress-bar",
            "-o", output_path, url
        ], check=True)
        print("✅ Done.")
    except subprocess.CalledProcessError as e:
        print(f"❌ Failed to download {url}{e}")

def download_music_by_id(music_id: int):
    print(f"\n▶ 正在处理音乐 ID:{music_id}")
    
    # 请求 JSON 数据
    resp = requests.get(api_url, headers=headers, params={
        "language": "korean",
        "music_id": str(music_id),
        "kind_id": "33",
        "filter": ""
    })

    if not resp.ok:
        print(f"❌ 请求失败:{music_id}")
        return

    data = resp.json()
    # print(resp.json())
    result_files = data.get("result", [])
    result_article = data.get("result_article", [{}])
    article_id = result_article[0].get("id", music_id)

    max_jpg_size = -1

    # 遍历文件并下载
    with open(log_file, "a", encoding="utf-8") as log:
        for file in result_files:
            file_name = file.get("file_name")
            if not file_name:
                print(f"⏭️ 跳过:music_id={music_id},该文件无 file_name")
                continue
            file_ext = file["file_ext"].lower()
            filename_origin = file["filename_origin"].strip().replace(" ", "_")
            file_path = file["file_path"].replace("\\", "/")
            full_url = base_url + file_path
            save_path = os.path.join(save_dir, f"{article_id}_{filename_origin}")
            if file_ext == ".jpg":
                file_size = float(file.get("file_size", 0))
                print(f"📸 处理图片:{file_name} ({file_size} bytes)")
                if file_size > max_jpg_size:
                    max_jpg_size = file_size
                    download_with_curl(full_url, save_path)
                    log.write(f"{music_id}\t{file_name}\t{filename_origin}\t{file_path}\n")
                else:
                    print(f"⏭️ 跳过:music_id={music_id},该 jpg 文件尺寸较小")
            else:
                file_size = float(file.get("file_size", 0))
                print(f"🎵 处理mp3:{file_name} ({file_size} bytes)")
                download_with_curl(full_url, save_path)

                # 写入日志行:music_id file_name filename_origin file_path
                log.write(f"{music_id}\t{file_name}\t{filename_origin}\t{file_path}\n")

# ✅ 在此处添加你需要的音乐 ID
music_ids = range(4784,4803)  # 示例:下载 ID 从 4518 到 4527 的音乐
# music_ids = [4363]

for music_id in music_ids:
    download_music_by_id(music_id)

歌曲的ID号可通过浏览器开发者工具查看网站源码获取,也可以将鼠标移动到该网站对应歌曲的图片上方,即可在左下角看到歌曲ID。

在网站上找到对应的歌曲ID