You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python从带&__d=dis的Instagram链接获取JSON数据?

解决Instagram带&__d=dis参数的JSON数据获取问题

出现JSONDecodeError的核心原因是,Instagram对带有__d=dis参数的接口响应格式做了调整,或是请求头/会话有效性存在问题,导致返回内容并非标准JSON。以下是具体解决步骤:

1. 先排查响应内容

不要直接调用.json()方法,先打印响应的原始文本,确认返回内容类型:

response = requests.get(url, headers=headers)
print(response.text)

常见异常情况:

  • 返回登录页面HTML(说明SESSIONID过期或无效)
  • 响应开头带有for (;;);前缀(Instagram对部分接口的特殊包装)

2. 调整请求头参数

旧版User-Agent可能被识别为异常请求,更新为近期浏览器UA,同时补充移动端接口常用的x-ig-app-id参数:

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "cookie": f"sessionid={SESSIONID};",
    "x-ig-app-id": "936619743392459"
}

3. 处理带前缀的响应内容

如果响应开头是for (;;);,需要先移除该前缀再解析JSON:

import requests

url = 'https://www.instagram.com/p/Ch656GRoyuO/?__a=1&__d=dis'
SESSIONID = '9hfMsiKKe8YHWVqVYG9xv3h8f7MITWWZ'
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "cookie": f"sessionid={SESSIONID};",
    "x-ig-app-id": "936619743392459"
}

response = requests.get(url, headers=headers)
raw_content = response.text.strip()

# 处理特殊前缀
if raw_content.startswith('for (;;);'):
    cleaned_content = raw_content[len('for (;;);'):].strip()
    data = requests.utils.json_loads(cleaned_content)
else:
    try:
        data = response.json()
    except requests.exceptions.JSONDecodeError:
        print("无法解析JSON,响应内容:", raw_content)
        data = None

if data:
    items = data.get("items")
    print(items)

关键注意事项

  • SESSIONID有效性:必须确保SESSIONID是当前登录状态下的有效值,过期或无效的会话会返回登录页面,无法获取JSON数据。
  • 接口变动:Instagram的非公开API参数(如__a=1、__d=dis)随时可能调整,若上述方法失效,需重新抓包分析最新请求格式。

内容的提问来源于stack exchange,提问作者user16813646

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:42:14