You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Instaloader仅下载Instagram照片?修改判断代码无效

解决Instaloader仅下载Instagram照片的问题

首先需要明确:Instaloader的Post对象没有直接的is_photo属性,判断照片帖需要通过否定视频帖标记,同时按需处理轮播帖的情况:

基础版:下载所有非视频帖子(含轮播帖)

将原代码中的if post.is_video:替换为if not post.is_video:,即可下载所有单图帖和轮播帖(轮播帖中的所有媒体会被一并下载,包括轮播里的图片和视频):

from instaloader import Instaloader, Profile

L = Instaloader()

L.login("username","Pass")

PROFILE = "instagram"
profile = Profile.from_username(L.context, PROFILE)

posts_sorted_by_likes = sorted(profile.get_posts(), key=lambda post: post.likes, reverse=True)

for post in posts_sorted_by_likes:
    # 仅处理非视频帖
    if not post.is_video:
        L.download_post(post, PROFILE)

进阶版:仅下载纯照片(排除轮播中的视频)

如果需要严格只下载照片(包括轮播里的图片,跳过轮播内的视频),需要单独遍历轮播节点并筛选图片:

from instaloader import Instaloader, Profile, Post

L = Instaloader()

L.login("username","Pass")

PROFILE = "instagram"
profile = Profile.from_username(L.context, PROFILE)

posts_sorted_by_likes = sorted(profile.get_posts(), key=lambda post: post.likes, reverse=True)

for post in posts_sorted_by_likes:
    if not post.is_video:
        if post.is_sidecar:
            # 遍历轮播中的每个媒体节点
            for node in post.get_sidecar_nodes():
                if not node.is_video:
                    # 将节点转为Post对象后下载
                    sidecar_post = Post(L.context, node.media_metadata)
                    L.download_post(sidecar_post, PROFILE)
        else:
            # 单图帖直接下载
            L.download_post(post, PROFILE)

关键说明

  • 若你之前尝试用if post.is_photo:会无效,因为Instaloader的Post类没有这个属性,正确判断逻辑为not post.is_video。
  • 轮播帖(post.is_sidecar为True)会被not post.is_video包含,因为轮播帖本身不是纯视频帖;如果轮播内混有视频,进阶版代码会跳过这些视频节点。

内容的提问来源于stack exchange,提问作者Rasedul Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:01:29