🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

如何抓取Instagram:个人资料、帖子、评论等

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

30-Jun-2026

TL;DR:

  • Instagram 通过其内部 JSON API 进行渲染——所以直接调用它们。 个人主页通过 web_profile_info 被加载;帖子和评论来自 GraphQL 端点。您在渲染的会话内获取 JSON,而不是抓取 DOM。
  • API 调用生效的两个要素:x-ig-app-id 头和页面的 cookies。 首先加载 instagram.com 以使会话拥有 cookies,然后在页面内部通过 fetch() 调用 API,设置 credentials: 'include' 和 app-id 头。
  • 地区和真实浏览器是必需的。 Instagram 强烈依赖 IP 声誉和指纹;来自一个出口的同一调用在另一个出口是正常的。固定 proxyCountry 并在反检测浏览器上运行。
  • 您返回的是结构化对象,而不是 HTML。 web_profile_info 返回完整的 user 对象——粉丝、关注、帖子计数、验证、个人简介——完全按照 Instagram 自己前端所需的格式。
  • 一个模式覆盖个人资料、帖子和评论。 创建一个会话,访问匹配的内部端点,解析 JSON。表面会变化;技术则不会。
  • 免费开始。 新的 Scrapeless 账户包括免费的抓取浏览器运行时——可在 app.scrapeless.com 注册。

介绍:通过其 API 抓取 Instagram

Instagram 的网页是通过内部 JSON 端点加载的 React 外壳。抓取渲染的 DOM 是困难且脆弱的方式——选择器会变化,而且大多数数据甚至不在初始标记中。可靠的方法是调用前端调用的相同端点:个人资料使用 web_profile_info,帖子及其评论使用 GraphQL 查询。它们返回干净、结构化的 JSON。

问题在于这些端点只会响应看起来是来自 Instagram 网页应用的请求。这意味着三点:请求携带 x-ig-app-id 头,包括会话的 cookies,并且起始于一个 Instagram 信任的 IP 和浏览器指纹。错过任何一项,您将得到一个空响应或一个检查点。

本指南基于 Scrapeless 抓取浏览器运行——反检测的 Chromium 通过住宅出口——通过 CDP 连接到 Puppeteer。您加载 instagram.com 以获取真实会话,然后从页面内部调用其内部 API。下面的个人资料提取是实时捕获的。仅公开数据。


您可以用它做什么

  • 拉取个人资料——粉丝、关注、帖子计数、验证、个人简介、外部链接。
  • 通过短代码获取单个帖子,包含其媒体、标题和统计数据。
  • 收集帖子的评论,包括作者、文本和点赞计数。
  • 按分页浏览用户的帖子,通过时间线端点。
  • 按规模丰富个人资料,通过在句柄列表上循环调用个人资料接口。

为什么选择 Scrapeless 抓取浏览器

Scrapeless 抓取浏览器是一个可定制的、反检测的云浏览器,专为网络爬虫和 AI 代理设计。专门针对 Instagram,它提供:

  • 自开发的 Chromium——一个真正的浏览器,启动会话并保持 API 调用所需的 cookies。
  • 反检测指纹技术——请求看起来像是 Instagram 网页应用,因此内部端点响应,而不是返回检查点。
  • 覆盖 195 个国家的住宅代理——按国家固定出口;正确的地区才会获得干净响应。
  • 可配置的会话 TTL——使会话在多个端点调用之间保持活跃。
  • 标准 Puppeteer 连接——使用 SDK 创建会话,然后通过 CDP 进行 puppeteer.connect();其余就是普通的 Puppeteer。

在免费的计划中获取 API 密钥,访问 app.scrapeless.com


先决条件

  • Node.js 18 或更高版本
  • 一个 Scrapeless 账户和 API 密钥——在 app.scrapeless.com 注册
  • 熟悉 Puppeteer 和 JSON 的基础知识

安装

bash Copy
npm install @scrapeless-ai/sdk puppeteer-core
bash Copy
export SCRAPELESS_API_KEY="your_api_token_here"

第 1 步——创建会话并加载 Instagram

SDK 创建云会话;Puppeteer 通过 CDP 连接。首先导航到 instagram.com 是为了给会话提供内部 API 所需的 cookies:

javascript Copy
import { Scrapeless } from '@scrapeless-ai/sdk';
import puppeteer from 'puppeteer-core';

const client = new Scrapeless({ apiKey: process.env.SCRAPELESS_API_KEY });

const { browserWSEndpoint } = await client.browser.create({
  proxyCountry: 'US',   // 固定出口——地区影响 API 的响应
  sessionTTL: 180,
});

const browser = await puppeteer.connect({ browserWSEndpoint });
const page = await browser.newPage();
javascript Copy
await page.goto('https://www.instagram.com/', {
  waitUntil: 'domcontentloaded',
  timeout: 60000,
});

如果调用卡住或返回空结果,请在更改其他内容之前先切换 proxyCountry —— 区域是最常见的原因。


第2步 — 从 web_profile_info 抓取个人资料

在会话保持活跃的情况下,从页面内 fetch() 个人资料端点。两个关键的细节是 x-ig-app-id 头部和 credentials: 'include'(以便页面的 cookies 也能传递):

javascript Copy
const user = await page.evaluate(async (username) => {
  const res = await fetch(
    `https://i.instagram.com/api/v1/users/web_profile_info/?username=${username}`,
    {
      headers: { 'x-ig-app-id': '936619743392459' }, // 公共 Web 应用 ID
      credentials: 'include',
    },
  );
  const data = JSON.parse(await res.text());
  return data.data.user;
}, 'nasa');

console.log({
  username: user.username,
  full_name: user.full_name,
  verified: user.is_verified,
  followers: user.edge_followed_by.count,
  following: user.edge_follow.count,
  posts: user.edge_owner_to_timeline_media.count,
});
// {
//   username: 'nasa',
//   full_name: 'NASA',
//   verified: true,
//   followers: 104420451,
//   following: 91,
//   posts: 4817
// }

这将准确返回 Instagram 的完整 user 对象 — 其结构与其前端呈现的结构相同。

在免费计划中获取您的 API 密钥: app.scrapeless.com


第3步 — 通过 GraphQL 获取帖子和评论

单个帖子及其评论来自 Instagram 的 GraphQL 端点。形态相同 — 从页面内 fetch() — 但这是一个 POST 请求,变量中包含帖子的短代码:

javascript Copy
const shortcode = 'C1234567abc'; // 来自 instagram.com/p/<shortcode>/

const post = await page.evaluate(async (shortcode) => {
  const variables = JSON.stringify({ shortcode });
  // doc_id 标识 Web 应用使用的持久化 GraphQL 查询
  const body = `variables=${encodeURIComponent(variables)}&doc_id=YOUR_DOC_ID`;
  const res = await fetch('https://www.instagram.com/graphql/query', {
    method: 'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body,
    credentials: 'include',
  });
  return JSON.parse(await res.text());
}, shortcode);

doc_id 是 Instagram 前端发送的持久查询 ID;从真实帖子视图的网络面板中捕获当前的 ID。从响应中读取媒体对象(xdt_shortcode_media)以获取标题、媒体 URL 和评论边缘。


您获得的返回

个人资料调用返回 Instagram 的 user 对象。以下形态是一个真实捕获;计数随着时间变化:

json Copy
{
  "username": "nasa",
  "full_name": "NASA",
  "is_verified": true,
  "is_private": false,
  "biography": "Making the seemingly impossible, possible...",
  "external_url": "https://...",
  "edge_followed_by": { "count": 104420451 },
  "edge_follow": { "count": 91 },
  "edge_owner_to_timeline_media": { "count": 4817 }
}
// 来自 web_profile_info 的真实捕获 (@nasa)。完整的用户对象包含更多字段;根据需要读取所需字段。

一些诚实的观察:

  • user 对象很大。 它包括业务标志、AI 代理字段、高亮计数等 — 读取必要的部分,忽略其余部分。
  • 计数存储在 edge_*.count 中。 粉丝、关注和帖子分别嵌套在 edge_followed_byedge_followedge_owner_to_timeline_media 下。
  • 私人帐户返回个人资料框架,但不返回媒体。 在期望帖子之前检查 is_private
  • 区域与头部一样重要。 固定 proxyCountry;不幸的区域是身体为空的常见原因。

结论:调用 Instagram 已经公开的 API

干净地抓取 Instagram 意味着从真实、活跃的会话中调用其内部 JSON 端点 — web_profile_info 用于个人资料,GraphQL 用于帖子和评论 — 配置 x-ig-app-id 头部和页面自己的 cookies。使用 Scrapeless Scraping Browser 进行这些调用是有效的:反检测的 Chromium 加上住宅出访,因此 Instagram 把请求当作其自己的 Web 应用。有关在其他社交平台上使用相同 SDK-over-CDP 模式的信息,请参见 TikTok 抓取指南抓取浏览器产品页面文档 涵盖了完整的 SDK 功能。固定区域,保持会话活跃,发送应用 ID 头部,并读取 JSON。


准备好构建您的 AI 驱动的数据管道了吗?

加入我们的社区,获取免费计划,并与构建社交数据管道的开发者连接:Discord · Telegram

app.scrapeless.com 注册以获取免费的抓取浏览器运行时,并将上述模式调整为您的工作流程所需的个人资料、帖子和标签。请查看 定价 以获取规模信息。


常见问题

问:抓取 Instagram 合法吗?
收集公开可见的数据通常是被允许的,但 Instagram 的服务条款适用,各个司法管辖区的规则有所不同。仅抓取公共数据,查看服务条款,并针对您的用例咨询律师。

问:为什么个人资料 API 返回空响应或检查点?
通常有三种情况:缺少 x-ig-app-id 头部、没有会话 Cookie(您未先加载 instagram.com)、或 Instagram 不信任的出口地区。发送头部,使用 credentials: 'include',并固定 proxyCountry

问:我需要登录吗?
对于公共个人资料和帖子,网络应用的端点可以响应匿名但暖启动的会话。已登录的抓取属于不同的高风险路径;本指南仅针对公共数据。

问:帖子中的 doc_id 从哪里来?
它是 Instagram 前端发送到 GraphQL 的持久化查询 ID。请在真实的帖子视图中查看网络面板上的当前值——它会随时间而变化。

问:我需要代理吗?
是的。Instagram 对 IP 声誉非常重视;通过 proxyCountry 固定住宅出口,以便内部端点作出响应。

问:我可以发出多少请求?
保持适度——每个地区少量会话和调用之间留有延迟——以确保 IP 声誉信号保持清晰。

问:我可以在没有 AI 代理的情况下运行吗?
可以。这是 Scrapeless SDK 加上简单的 Puppeteer 通过 CDP——不需要代理。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录