jsonscraper

如何衡量 IG 竞争对手内容的变化:Python API 流水线

按计划收集公开帖子,基于自有数据计算指标,并向团队发送可核验的摘要。

编辑政策 报告错误

营销团队可以在信息流中看到竞争对手发布的内容,但手动浏览很难回答一个具体问题:哪些形式和主题持续获得互动,哪些只是偶尔引人注目?解决办法是每天保存公开帖子的相关数据,并按时间、形式和可用计数进行比较。

文章:如何衡量 IG 竞争对手内容的变化:Python API 流水线
摘要:一套实用的公开 IG 帖子监测方案:调用 IG Scraper API、规范化 JSON、每日保存快照,并计算变化趋势,避免混淆累计互动与新增互动。
图片用途:封面——核心概念
栏目:
视觉主题:数字分析仪表板,展示 IG 风格的公开内容卡片时间线、互动计数器和每日数据快照,清晰呈现……
© jsonscraper · AI 生成的插图

下面介绍一套基于 Python 和 IG Scraper API 的基础流水线。它会获取所选账号的帖子,将响应保存为 JSONL,并汇总新内容。此类报告中的互动指标反映 API 在采集时返回的数值;不同日期的快照则可以用于单独分析这些数值的变化。

首先确定具体要比较什么

对于小规模竞争对手样本,只需维护一份公开账号列表,并按统一计划采集这些账号的帖子。先从数据能够回答的问题入手:内容发布频率如何,哪些帖子属于 Reels 或其他形式,哪些主题反复出现,以及可用的点赞数和评论数如何变化。

在存储中区分两个概念:帖子及其快照。如果响应中包含稳定 ID,就用它标识帖子;每次采集都作为带有采集时间的独立记录保存。这样就能查看可用计数的变化,而不是用今天的数值覆盖昨天的数值。

接入文档中列出的路由

jsonscraper 文档为基础请求列出了地址 https://ig.jsonscraper.com 和路由 GET /v1/user/by/username。API 路由列表还列出了用于获取帖子的 GET /v1/user/medias/chunk。请在关联的 Postman 集合中核实准确的参数集和响应字段:在检查自己请求的实际响应之前,不要假定其结构。

初步验证时,请使用文档中的个人资料请求示例;通过环境变量传递密钥,不要将其写入源代码:

curl -G "https://ig.jsonscraper.com/v1/user/by/username" \
  --data-urlencode "username=apple" \
  --data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
  --data-urlencode "cache_timeout=60"

产品页面的示例为个人资料路由展示了 username、license_key 和 cache_timeout。只有在其他路由的文档也列出该参数时,才将它用于这些路由。请求帖子时,请从该路由的规范中获取最新参数名称。

将响应保存为带时间的快照

下面的脚本是用于实际运行的模板:帖子路由的 URL 和参数留在配置中,以便严格依据 Postman 文档填写。处理程序会保存原始 JSON 和采集时间;检查实际响应后,再添加字段规范化逻辑。

import json
import os
from datetime import datetime, timezone
from pathlib import Path

import requests

BASE_URL = "https://ig.jsonscraper.com"
USERNAME = os.environ["IG_USERNAME"]
LICENSE_KEY = os.environ["JSONSCRAPER_LICENSE_KEY"]
OUTPUT = Path("instagram_snapshots.jsonl")

# 根据 Postman 集合中
# GET /v1/user/medias/chunk 路由的文档填写端点和参数。
MEDIA_PATH = os.environ["IG_MEDIA_PATH"]
MEDIA_PARAMS = json.loads(os.environ["IG_MEDIA_PARAMS_JSON"])

params = {
    **MEDIA_PARAMS,
    "username": USERNAME,
    "license_key": LICENSE_KEY,
}

response = requests.get(
    f"{BASE_URL}{MEDIA_PATH}", params=params, timeout=30
)
response.raise_for_status()
payload = response.json()

record = {
    "collected_at": datetime.now(timezone.utc).isoformat(),
    "username": USERNAME,
    "response": payload,
}
with OUTPUT.open("a", encoding="utf-8") as file:
    file.write(json.dumps(record, ensure_ascii=False) + "\n")

这里有意不填写虚构的分页参数或字段名称:应从具体规范中复制,并通过 API 响应进行验证。为请求设置超时并调用 raise_for_status(),有助于在将结果当作普通数据写入之前发现网络错误。要实现自动运行,还应添加 JSON 校验和错误日志。

添加计划任务和指标

通过 cron 或自动化平台的计划任务每天采集一次。对于多个账号,遍历配置列表,为每个账号保存单独快照,并在临时错误后支持重试。将密钥保存在环境变量或密钥管理系统中;API 页面也特别建议不要将其嵌入客户端代码。

检查响应后,将记录规范化为包含 username、media_id、collected_at、内容类型和可用计数等字段的表格。不要删除原始 JSON:如果响应格式发生变化,或需要核查计算结果,它会派上用场。

在分析层中,计算某一时段内的新帖子数量、按形式划分的可用互动指标中位数,以及同一帖子的计数器在不同快照之间的变化。中位数可以降低单条爆红帖对汇总结果的影响。比较账号时使用相同的时间窗口,并在汇总指标旁标注样本量。

最终成果

团队将获得可复现的帖子表格和每日摘要,其中包括内容发布频率、形式分布以及可用互动指标的变化。这些信息有助于为自有编辑排期提出假设,而不只是从信息流中收集截图。

下一步可以将规范化记录发送到 Google Sheets、数据库或可视化系统,并将文本摘要作为独立阶段生成。如果接入 AI,请向它提供聚合数据,并要求它注明时间段和帖子数量,描述可观察到的规律;策略决策仍应由编辑负责。

从一个账号和一条路由开始:先在 IG Scraper API 说明中核实参数和响应结构,再将该配置固定到计划任务中。这样,竞争对手监测就能从一次性的手动浏览,转变为具有可保存历史记录的清晰流水线。

People

No people listed for this article yet.

Keep reading如何使用 Python 抓取 IG 数据
Read the next article

将阅读内容转化为可用的集成

探索 jsonscraper 社交数据 API、测试请求并构建下一个工作流。

查看 API