用 Python 获取 Instagram 用户资料和帖子数据
这是一篇可直接照抄的实战教程:用 Python 调用 Instagram Cheapest API,先从用户名拿到公开资料(粉丝数、简介、帖子数),再分页把该用户的全部帖子抓下来。数据是实时、未缓存的原始 JSON,每千次请求低至 $0.10。
准备工作
- 一个 RapidAPI 账号(免费档每月 30 次,够测试)
- 在 Instagram Cheapest API 页面拿到你的 RapidAPI Key
- Python 3.7+ 并安装
requests(pip install requests)
第一步:从用户名拿到资料和 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_media 用 next_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 流量额度、避免超额计费。
费用
抓一个用户的资料 + 几页帖子,通常就几次请求。各档价格:
- 免费 Basic:每月 30 次
- Pro($59/月):含 150,000 次,超出 $0.13/千次
- Ultra($119/月):含 900,000 次,超出 $0.11/千次
- Mega($249/月):含 3,000,000 次,超出 $0.10/千次
合规提醒
本 API 只返回 公开的 Instagram 数据。批量采集前请确认符合 Instagram 服务条款及适用隐私法规(GDPR、CCPA),尤其是涉及存储个人信息时。与 Meta/Instagram 无隶属或背书关系。
小结
流程很直接:user/{username} 拿资料和 user_id → user_media 分页抓帖子 → 解析原始 JSON 算指标。配上 Python 和一个 RapidAPI Key,五分钟就能跑通,而且每千次低至 $0.10,对独立开发者和小团队都很划算。
合规说明:本 API 仅返回公开的 Instagram 数据。你需自行遵守 Instagram 服务条款及适用隐私法规(GDPR/CCPA)。与 Meta/Instagram 无隶属或背书关系。