用 Python 获取 Instagram 用户资料和帖子数据

这是一篇可直接照抄的实战教程:用 Python 调用 Instagram Cheapest API,先从用户名拿到公开资料(粉丝数、简介、帖子数),再分页把该用户的全部帖子抓下来。数据是实时、未缓存的原始 JSON,每千次请求低至 $0.10

准备工作

第一步:从用户名拿到资料和 user_id

user/{username} 是唯一的路径参数接口,返回公开资料,也给你后续接口要用的数字 user_id

import requests

API_HOST = "instagram-cheapest.p.rapidapi.com"
BASE = f"https://{API_HOST}/api/v1/instagram"
API_KEY = "你的_RAPIDAPI_KEY"
HEADERS = {"x-rapidapi-host": API_HOST, "x-rapidapi-key": API_KEY}

def get_profile(username):
    r = requests.get(f"{BASE}/user/{username}", headers=HEADERS)
    r.raise_for_status()
    return r.json()

profile = get_profile("nike")
print(profile)
# 先打印看结构,再取你要的字段(字段名以原始 JSON 为准)
user_id = profile.get("user_id")        # 确认实际字段名
followers = profile.get("follower_count")  # 确认实际字段名

返回的是 Instagram 原始 JSON,字段名不是本 API 固定的,所以务必先打印一次,确认 user_id、粉丝数等字段的真实名称。

第二步:拿一页帖子

有了 user_id,用 user_media 拿帖子。每页约 12 条。

def get_media(user_id, next_max_id=None):
    params = {"user_id": user_id}
    if next_max_id:
        params["next_max_id"] = next_max_id
    r = requests.get(f"{BASE}/user_media", headers=HEADERS, params=params)
    r.raise_for_status()
    return r.json()

data = get_media(user_id)
items = data.get("items", [])  # 以原始 JSON 的实际 key 为准
for post in items:
    print(post.get("code"), post.get("like_count"), post.get("comment_count"))

第三步:分页抓取全部帖子

user_medianext_max_id 翻页:把上一页响应里顶层的 next_max_id 传入下一次请求,直到 more_available 为 false。

def get_all_media(user_id, max_pages=10):
    all_items, next_max_id = [], None
    for _ in range(max_pages):
        data = get_media(user_id, next_max_id)
        all_items.extend(data.get("items", []))
        next_max_id = data.get("next_max_id")
        if not data.get("more_available"):
            break
    return all_items

posts = get_all_media(user_id)
print(f"共抓取 {len(posts)} 条帖子")

max_pages 兜底,避免对帖子特别多的大号无限翻页、把请求数(和费用)跑飞。完整的分页讲解见 分页指南(英文)

第四步:算个基础指标——互动率

有了资料和帖子,最常用的就是互动率(engagement rate):

def engagement_rate(posts, followers):
    if not posts or not followers:
        return None
    likes = sum(p.get("like_count", 0) for p in posts)
    comments = sum(p.get("comment_count", 0) for p in posts)
    n = len(posts)
    return (likes / n + comments / n) / followers * 100

rate = engagement_rate(posts, followers)
print(f"互动率约 {rate:.2f}%")

想做更完整的红人分析(找爆款、发帖节奏、评论情绪、识别刷量),可以接着往下做——思路见 用评论接口做红人和舆情分析

fields 省带宽

默认返回的 JSON 很啰嗦。只取需要的字段,用 fields 参数裁剪:

params = {
    "user_id": user_id,
    "fields": "items,next_max_id,more_available"  # 字段名以实际 JSON 为准
}

这能显著减小响应体积,帮你守住每月 10 GB 流量额度、避免超额计费。

费用

抓一个用户的资料 + 几页帖子,通常就几次请求。各档价格:

合规提醒

本 API 只返回 公开的 Instagram 数据。批量采集前请确认符合 Instagram 服务条款及适用隐私法规(GDPR、CCPA),尤其是涉及存储个人信息时。与 Meta/Instagram 无隶属或背书关系。

小结

流程很直接:user/{username} 拿资料和 user_iduser_media 分页抓帖子 → 解析原始 JSON 算指标。配上 Python 和一个 RapidAPI Key,五分钟就能跑通,而且每千次低至 $0.10,对独立开发者和小团队都很划算。

在 RapidAPI 上免费开始 →

合规说明:本 API 仅返回公开的 Instagram 数据。你需自行遵守 Instagram 服务条款及适用隐私法规(GDPR/CCPA)。与 Meta/Instagram 无隶属或背书关系。

今天就开始构建

Basic 免费档每月 30 次请求,无需承诺。

在 RapidAPI 上开始