如何用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
相关产品推荐
相关产品推荐

