用 Instagram 评论 API 做红人和舆情分析
帖子下面的评论是最真实的"用户原声":粉丝喜欢什么、吐槽什么、对一次合作/上新的反应如何,全在里面。人工看只能看到零星案例;用程序把成千上万条评论抓下来打分,你得到的是一条能驱动决策的趋势线。本文用 Instagram Cheapest API 的评论接口,带你做红人评估和舆情分析。数据实时、未缓存,每千次请求低至 $0.10。
整体流程
- 拿到目标账号的帖子和短码(
user_media) - 按短码抓每条帖子的评论(
media_comments) - 对评论做情绪打分
- 聚合成可看的指标:按帖子、按时间、按主题
第一步:拿到帖子的短码
评论接口按帖子短码(code)取数据。先用 user/{username} 拿到 user_id,再用 user_media 拿帖子列表和它们的 code。
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_json(path, params=None):
r = requests.get(f"{BASE}/{path}", headers=HEADERS, params=params or {})
r.raise_for_status()
return r.json()
profile = get_json("user/some_brand")
user_id = profile.get("user_id") # 以原始 JSON 为准
posts = get_json("user_media", {"user_id": user_id}).get("items", [])
codes = [p.get("code") for p in posts if p.get("code")]
第二步:分页抓取评论
media_comments?code= 返回某条帖子的评论,用 after 游标翻页(游标取响应里的 page_info.end_cursor)。
def all_comments(code, max_pages=10):
texts, after = [], None
for _ in range(max_pages):
params = {"code": code}
if after:
params["after"] = after
data = get_json("media_comments", params)
for c in data.get("comments", []): # 以原始 JSON 为准
if c.get("text"):
texts.append(c["text"])
page = data.get("page_info", {})
if not page.get("has_next_page"):
break
after = page.get("end_cursor")
return texts
用 max_pages 兜底——爆款帖子可能有几万条评论,做情绪分析通常取有代表性的样本就够,不必全量,既省请求又省钱。
第三步:情绪打分
英文评论可以用 VADER(对短社媒文本友好);如果评论里中文多、或者要识别反讽、混合情绪,建议把评论批量丢给大模型(LLM)打分,顺便还能抽取主题。
# 英文基线:VADER(pip install nltk)
from nltk.sentiment import SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()
def score(texts):
out = []
for t in texts:
s = sia.polarity_scores(t)["compound"] # -1(负) ~ +1(正)
label = "正面" if s > 0.05 else "负面" if s < -0.05 else "中性"
out.append({"text": t, "score": s, "label": label})
return out
scored = score(all_comments("ABC1234XYZ_"))
pos = sum(1 for s in scored if s["label"] == "正面")
print(f"{pos}/{len(scored)} 条评论为正面")
第四步:识别刷量(评论真实性)
评估红人时,这一步最值钱:真实粉丝的评论内容多样、切题;而刷出来的互动往往是清一色单个表情、"很棒🔥"、"互关一下"之类的模板和垃圾评论。几个低成本高信号的检查:
SPAM = {"互关", "follow back", "dm me", "加我", "私信"}
def authenticity(texts):
if not texts:
return None
total = len(texts)
emoji_only = sum(1 for t in texts if t and not any(ch.isalnum() for ch in t))
spam = sum(1 for t in texts if any(p in t.lower() for p in SPAM))
dup = total - len(set(t.strip().lower() for t in texts))
return {
"纯表情占比": round(emoji_only / total * 100, 1),
"垃圾评论占比": round(spam / total * 100, 1),
"重复评论占比": round(dup / total * 100, 1),
}
如果大量评论是纯表情、重复或满屏"互关",那这条帖子的互动大概率是刷出来的——哪怕评论"数量"很好看。把这个和粉丝数/点赞数对比,就能在投放前判断一个红人值不值得合作。
能做成什么
- 品牌口碑看板——对自家账号的评论情绪做实时趋势线
- 竞品舆情对比——同一套流程跑竞品账号
- 上新/活动监测——发布后几小时到几天内追踪粉丝反应
- 红人尽调——投放前筛掉刷量账号
费用大概多少
分析一个品牌最近 30 条帖子、每条抓 ~3 页评论,大约 1 次资料 + 3 页帖子 + 30×3 ≈ 94 次请求,也就一分多钱。各档价格:
- 免费 Basic:每月 30 次
- Pro($59/月):含 150,000 次,超出 $0.13/千次
- Ultra($119/月):含 900,000 次,超出 $0.11/千次
- Mega($249/月):含 3,000,000 次,超出 $0.10/千次
给请求加 fields 参数,只取评论文本和时间,能把原始 JSON 裁小,守住每月 10 GB 流量额度。
合规提醒
本 API 只返回 公开的 Instagram 数据。对公开评论做情绪/舆情分析是常见用途,但你需自行遵守 Instagram 服务条款及适用隐私法规(GDPR、CCPA),尤其是存储评论文本和用户名时。与 Meta/Instagram 无隶属或背书关系。
小结
评论是最丰富又最被低估的公开数据源。用 user_media 找帖子、media_comments 抓评论,再做情绪打分和真实性检查,你就能把一堆零散评论变成可决策的洞察。每千次低至 $0.10,监测几十个品牌/红人也就几美元一个月。基础用法可先看 用 Python 获取用户资料和帖子 和 Instagram API 入门。
合规说明:本 API 仅返回公开的 Instagram 数据。你需自行遵守 Instagram 服务条款及适用隐私法规(GDPR/CCPA)。与 Meta/Instagram 无隶属或背书关系。