如果营销人员需要手动检查数十个公开 IG 个人资料,最大的损耗并非打开页面所花的时间,而是缺少可比较的历史记录。单个快照只能显示今天的粉丝数;两个快照则可以计算所选时间段内的差值。要简单监测个人资料,可以自动发送请求,只保存需要的字段,并生成变更表。
下面是一个最小可用的 Python 示例:通过 IG Scraper API 按用户名获取个人资料信息,并写入带时间戳的 JSONL 记录。这样就能建立一个小型历史数据源,可接入 cron、n8n 或自建存储。有关端点和参数的官方说明,请参阅IG API 参考文档。
每日快照解决什么问题
假设团队在跟踪品牌或合作伙伴的公开账号,希望发现粉丝数、发布内容数或认证状态的变化。查看个人资料页面只能看到当前值,本身并不会保留上周的数据状态。因此,首先要确定哪些字段重要,然后连同观测日期一起保存。

端点 /v1/user/by/username 接受必填参数 username。响应中包含 follower_count、following_count、media_count、is_verified、is_private 和 biography 等字段。这些字段适合用于个人资料快照;它们不包含发布内容的历史记录,也无法单独解释指标变化的原因。
这个脚本有意保持精简:在指定时间获取一组可观测字段,并与之前的记录进行比较。这样,分析人员就能看到例如粉丝数在两次保存之间发生了变化,并在自动采集之外进一步核查。
准备密钥和账号列表
安装请求库,并将 API 密钥设置为环境变量。不要把密钥写入源文件、代码仓库或程序输出中。API 使用查询参数 license_key;下面的库会自动构造查询字符串。
python -m pip install requests
export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="你的密钥"
可以将个人资料列表保存在配置文件或项目变量中。首次运行时,只需使用一个用户名来检查响应、访问权限和存储写入是否正常。示例中的 username 是 API 参数,而密钥仅从环境中读取。
使用 Python 发起请求并保存快照
脚本会检查 HTTP 响应、API 外部状态以及 ig 对象是否存在。接着,它只保存明确存在的值。如果某个字段缺失,记录中会保留为 null:填入零会把未知值与真实的零混为一谈。

import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
API_URL = "https://ig.jsonscraper.com/v1/user/by/username"
LICENSE_KEY = os.environ["JSONSCRAPER_INSTAGRAM_LICENSE_KEY"]
USERNAME = "apple" # 替换为列表中的个人资料
OUTPUT = Path("instagram-profile-snapshots.jsonl")
response = requests.get(
API_URL,
params={"username": USERNAME, "license_key": LICENSE_KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok" or not isinstance(payload.get("ig"), dict):
raise RuntimeError("API 返回了意外的状态或结构")
profile = payload["ig"]
record = {
"observed_at": datetime.now(timezone.utc).isoformat(),
"username": profile.get("username", USERNAME),
"pk": profile.get("pk"),
"follower_count": profile.get("follower_count"),
"following_count": profile.get("following_count"),
"media_count": profile.get("media_count"),
"is_verified": profile.get("is_verified"),
"is_private": profile.get("is_private"),
}
with OUTPUT.open("a", encoding="utf-8") as file:
file.write(json.dumps(record, ensure_ascii=False) + "\n")
print("快照已保存:", record["username"], record["observed_at"])
示例中的字段和结构与该端点所述的个人资料信息相符。成功请求会返回调用时点的观测结果;若要分析动态变化,需要重复运行脚本并保存每个快照。IG Scraper API 页面展示了基本请求和 JSON 格式的示例响应。
计算快照之间的变化
JSONL 每行保存一条记录,因此可以使用 Python 标准库读取。下面的代码会为指定个人资料选取最近两条记录,并计算粉丝数差值。只有当两条记录都包含数值时,才会输出结果。
import json
from pathlib import Path
rows = [
json.loads(line)
for line in Path("instagram-profile-snapshots.jsonl").read_text(encoding="utf-8").splitlines()
]
username = "apple"
profile_rows = [row for row in rows if row.get("username") == username]
profile_rows.sort(key=lambda row: row["observed_at"])
if len(profile_rows) >= 2:
previous, current = profile_rows[-2:]
old = previous.get("follower_count")
new = current.get("follower_count")
if isinstance(old, int) and isinstance(new, int):
print({
"username": username,
"from": previous["observed_at"],
"to": current["observed_at"],
"follower_delta": new - old,
})
差值严格对应所选的两次观测。如果漏掉了运行,二者之间的间隔就会更长;因此,报告应显示两个日期,而不能自动将变化称为“单日变化”。要定期运行,请在 cron 或云平台的调度器中设置任务。在 n8n 中,也可以用调度器、HTTP 请求和结果写入数据库或表格等节点搭建相同流程;节点名称和存储连接方式取决于你的安装环境。
扩展到多个个人资料
若要处理账号列表,可将用户名放入单独文件并循环读取。分别保存每个请求的状态,这样某个个人资料请求失败时,不会抹去其他账号成功获取的数据。还应设置超时时间、记录错误日志,并只对请求失败的账号重试。
如果 API 返回了 pk,可以将它用作记录键,同时保留用户名以便阅读。标识符有助于区分个人资料本身和报告中的文本标签;如果没有该值,就不应臆造标识符或用其他字段代替。进行分析时,建议以 UTC 保存原始采集时间,并明确设定比较时段。
如果任务只需要按特定频率获取信息,文档所述的 cache_timeout 参数可以设置以秒为单位的缓存时长;IG 默认关闭缓存。请根据监测间隔选择时长,并将其与采集设置一并保存,以便解读结果时考虑请求参数。
最终会得到什么
运行数次后,你将获得一个包含公开指标时间快照的文件,以及一个可计算的简单差值,用于比较选定日期之间的变化。你可以将其加载到 Google Sheets、PostgreSQL 或分析系统中;单独的处理层可以在变化超过团队设定的阈值时生成通知。阈值是你的业务规则,并非 API 内置功能。
个人资料端点返回的是账号字段,因此若要审查新发布的内容,需要使用相应的媒体采集功能,不能从 media_count 推断。在 IG API 参考文档中,另有一个分页获取发布内容的端点,通过 user_id 和 end_cursor 参数加载内容;若任务需要研究具体帖子,请使用该端点。若目标是本文介绍的个人资料指标历史表,那么每位用户发起一次请求并持续保存快照即可。
从一个个人资料和两次运行开始:确认响应状态正确、日期已保存,并且缺失数据仍明确标记为未知。之后再添加账号列表和定时任务。这样,你就能获得一套可重复的观测记录,清楚标明时间间隔和原始值,便于核查并传递到后续分析流程。