使用Instaloader/Python下载Instagram Reels音频遇元数据获取失败,求解决
解决Instagram Reels音频下载失败的问题
你当前的代码报错是因为Post.from_shortcode仅能处理帖子短代码,而你传入的是Reels音频的专属ID,并非帖子短代码,因此无法正确获取元数据。以下是两种可行的解决方法:
方法一:直接请求音频页面提取音频链接
Instagram的Reels音频页面源码中会包含音频的直接访问链接,你可以通过解析页面HTML来获取:
import requests from bs4 import BeautifulSoup import json def get_reel_audio_data(audio_id): url = f"https://www.instagram.com/reels/audio/{audio_id}/" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } try: response = requests.get(url, headers=headers) response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") # 查找包含音频信息的JSON脚本 script_tags = soup.find_all("script", type="application/ld+json") for script in script_tags: data = json.loads(script.string) if "contentUrl" in data: return data["contentUrl"], True return None, False except Exception as e: if settings.DEBUG: import traceback print(traceback.format_exc()) capture_exception(e) return None, False
方法二:下载Reels视频后提取音频
既然你已经能成功下载Reels视频,可以先获取视频文件,再用ffmpeg提取音频:
- 确保已安装ffmpeg并添加到系统环境变量
- 使用以下代码完成音频提取:
import subprocess def extract_audio_from_video(video_path, output_audio_path): try: # 用ffmpeg提取音频,输出为MP3格式 subprocess.run([ "ffmpeg", "-i", video_path, "-q:a", "0", "-map", "a", output_audio_path ], check=True) return True except subprocess.CalledProcessError as e: if settings.DEBUG: print(f"音频提取失败: {e}") capture_exception(e) return False
注意:Instagram的页面结构和接口规则可能随时变动,上述方法需根据实际情况调整适配。
内容的提问来源于stack exchange,提问作者JTX
相关产品推荐
相关产品推荐

