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

使用cURL获取Instagram用户页面仅返回加载页的问题求助

解决Instagram页面仅返回加载页的cURL爬取问题

问题根源分析

你的代码存在几个直接错误,再加上Instagram的反爬机制,导致仅能获取到加载页面(SPA骨架屏),无法提取到window._sharedData中的内容:

1. 代码中的明显错误

  • User-Agent配置失效:HTTP头里写死了"User-Agent: USERAGENT"字符串,没有替换成定义好的$useragent变量,同时CURLOPT_USERAGENT设置被注释,导致请求的UA无效,直接被识别为非浏览器请求。
  • 多余的请求头:GET请求中添加了content-type: application/x-www-form-urlencoded头,GET请求无请求体,这个头会暴露爬虫特征。
  • JSON分割符错误:explode(';&lt;/script&gt;', $data[1])使用了HTML转义后的实体,实际响应中是原始的;</script>,导致无法正确分割出JSON数据。

2. Instagram反爬机制限制

Instagram对未登录/特征异常的请求会返回仅包含加载骨架的页面,不会直接输出window._sharedData,需要模拟真实浏览器的请求特征才能获取完整内容。


修复步骤

1. 修正User-Agent配置

移除HTTP头中的无效UA设置,启用CURLOPT_USERAGENT:

// 修改HTTP头数组,删除错误的User-Agent行
$arrSetHeaders = array(
    'origin: https://www.instagram.com',
    'authority: www.instagram.com',
    'upgrade-insecure-requests: 1',
    'Host: www.instagram.com',
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'accept-language:ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6',
    "Referer: https://www.instagram.com",
    'Connection: keep-alive',
    'cache-control: max-age=0',
);

// 取消注释并启用CURLOPT_USERAGENT
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

2. 移除多余请求头

删除content-type: application/x-www-form-urlencoded这一行,GET请求不需要该头。

3. 修复JSON分割逻辑

将scrape方法中的分割代码改为:

$data_json = explode(';</script>', $data[1]);

4. 启用Cookie支持(推荐)

Instagram对未登录请求限制严格,使用自己浏览器中提取的有效Cookie(需从已登录的Instagram会话中获取)可以大幅提高成功率:

// 取消注释Cookie代码,替换为自己的有效Cookie值
$cookies[] = 'sessionid=' . '你的sessionid';
$cookies[] = 'ig_did=' . '你的ig_did';
$cookies[] = 'mid=' . '你的mid';
$cookies[] = 'csrftoken=' . '你的csrftoken';

curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookies) );

注意:Cookie会定期过期,需及时更新;不要泄露sessionid,否则账号存在被盗风险。

5. 应对动态渲染(若上述步骤无效)

如果仍然仅返回加载页,说明内容是JavaScript动态渲染的,此时需要使用无头浏览器模拟真实加载:
例如使用PHP的spatie/browsershot库(依赖Node.js和Puppeteer):

use Spatie\Browsershot\Browsershot;

// 模拟浏览器加载页面,等待网络空闲
$html = Browsershot::url('https://www.instagram.com/maria43/')
    ->waitUntilNetworkIdle()
    ->html();

// 后续从$html中提取window._sharedData

修复后的getUrl方法示例

public static function getUrl($url) {
    $ch = curl_init();
    $useragent= 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36';

    curl_setopt($ch, CURLOPT_URL, $url);

    // 启用有效Cookie
    $cookies[] = 'sessionid=' . '你的sessionid';
    $cookies[] = 'ig_did=' . '你的ig_did';
    $cookies[] = 'mid=' . '你的mid';
    $cookies[] = 'csrftoken=' . '你的csrftoken';

    $arrSetHeaders = array(
        'origin: https://www.instagram.com',
        'authority: www.instagram.com',
        'upgrade-insecure-requests: 1',
        'Host: www.instagram.com',
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'accept-language:ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6',
        "Referer: https://www.instagram.com",
        'Connection: keep-alive',
        'cache-control: max-age=0',
    );

    curl_setopt($ch, CURLOPT_HTTPHEADER, $arrSetHeaders); 
    curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookies) );
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

    $response = curl_exec($ch);
    if ($response === false) {
        throw new Exception(curl_error($ch));
    }
    curl_close($ch);
    return $response;
}

注意事项

  • Instagram反爬机制会持续更新,基于window._sharedData的爬取方法可能随时失效。
  • 频繁爬取会导致IP被封禁,建议添加请求延迟(比如sleep(2)),控制请求频率。
  • 严格遵守Instagram服务条款,避免用于未经授权的爬取行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:12:11