如何使用Python/Python3下载Instagram帖子数据及公开账号按点赞排序的图片
一、使用Python下载Instagram帖子(含图片、视频)
可以用instagrapi这个第三方库来实现,它封装了Instagram的私有API,操作便捷。
步骤说明:
- 先安装依赖:
pip install instagrapi
- 编写代码完成下载:
from instagrapi import Client import os # 初始化客户端,建议用临时Instagram账号登录(部分公开帖子也需登录才能获取完整数据) cl = Client() cl.login("你的IG账号", "你的IG密码") # 目标帖子的URL或ID post_url = "https://www.instagram.com/p/xxxxxx/" post_id = cl.media_pk_from_url(post_url) # 获取帖子详情 media = cl.media_info(post_id) # 创建保存目录 save_dir = "instagram_downloads" os.makedirs(save_dir, exist_ok=True) # 判断帖子类型并下载 if media.media_type == 1: # 单图帖子 img_path = cl.media_download(media.pk, folder=save_dir) print(f"图片已保存至: {img_path}") elif media.media_type == 2: # 视频帖子 video_path = cl.media_download(media.pk, folder=save_dir) print(f"视频已保存至: {video_path}") elif media.media_type == 8: # 多图/多视频帖子 for i, item in enumerate(media.resources): save_path = cl.media_download(item.pk, folder=save_dir) if item.media_type == 1: print(f"第{i+1}张图片已保存至: {save_path}") else: print(f"第{i+1}个视频已保存至: {save_path}")
注意事项:
- 频繁请求会触发Instagram反爬机制,建议添加
time.sleep(2)这类间隔 - 若仅处理完全公开的帖子,可尝试不登录,但部分内容可能无法获取,优先用小号登录
二、从公开Instagram主页按点赞数排序下载图片
核心逻辑是先获取目标主页的所有公开帖子,提取图片的点赞数与下载信息,按点赞数降序排序后批量下载。
代码实现:
from instagrapi import Client import os import time cl = Client() cl.login("你的IG账号", "你的IG密码") # 目标公开主页的用户名 target_username = "example_user" user_id = cl.user_id_from_username(target_username) # 获取主页所有帖子(max_pages可调整,控制获取的帖子数量) medias = cl.user_medias(user_id, max_pages=5) # 筛选图片帖子并收集点赞数信息 image_posts = [] for media in medias: if media.media_type == 1: # 单图帖子 image_posts.append({ "like_count": media.like_count, "post_pk": media.pk }) elif media.media_type == 8: # 多图帖子,提取其中的图片项 for item in media.resources: if item.media_type == 1: image_posts.append({ "like_count": media.like_count, # 多图帖子的点赞数按主帖统计 "post_pk": item.pk }) # 按点赞数降序排序 sorted_posts = sorted(image_posts, key=lambda x: x["like_count"], reverse=True) # 创建保存目录 save_dir = f"{target_username}_sorted_images" os.makedirs(save_dir, exist_ok=True) # 下载排序后的图片 for idx, post in enumerate(sorted_posts): try: raw_path = cl.media_download(post["post_pk"], folder=save_dir) # 重命名文件,标注排序序号与点赞数 new_filename = f"{idx+1}_likes-{post['like_count']}_{os.path.basename(raw_path)}" new_path = os.path.join(save_dir, new_filename) os.rename(raw_path, new_path) print(f"已下载第{idx+1}张({post['like_count']}赞): {new_path}") time.sleep(2) # 添加间隔,避免触发限制 except Exception as e: print(f"下载失败: {str(e)}")
注意事项:
- 仅能访问公开主页内容,私有主页无法获取数据
- Instagram限制单账号请求频率,若目标主页帖子过多,建议分批次下载
- 多图帖子的单图无独立点赞数,只能用主帖总点赞数统计
内容的提问来源于stack exchange,提问作者Harshit Jain
相关产品推荐
相关产品推荐

