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

使用Google Sheets爬取Instagram粉丝时遭封禁的解决办法

解决Google Sheets批量爬取Instagram粉丝数被封禁的方案

这种情况我之前帮朋友处理过,本质就是Instagram的反爬机制检测到了Google Sheets服务器发起的批量请求,直接把这个IP段给限制了。下面几个方案亲测有效,你可以根据自己的需求选:

1. 给请求加随机延迟,分批处理

Google Sheets原生公式没法加延迟,但可以用Google Apps Script写自定义函数,实现分批、带间隔的请求,模拟真实用户的操作节奏:

  • 先把所有要爬的Instagram账号整理到A列(比如A2:A1000)
  • 打开「扩展程序」→「Apps脚本」,粘贴类似下面的代码:
    function fetchFollowersBatch() {
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      const dataRange = sheet.getRange("A2:A1000");
      const usernames = dataRange.getValues();
      const delayMin = 1000; // 最小延迟1秒
      const delayMax = 3000; // 最大延迟3秒
    
      for (let i = 0; i < usernames.length; i++) {
        const username = usernames[i][0];
        const targetCell = sheet.getRange(i+2, 2); // 结果写到B列对应行
    
        // 跳过已经爬过的单元格
        if (targetCell.getValue() !== "") continue;
        if (!username) continue;
    
        try {
          // 随机延迟
          Utilities.sleep(Math.random() * (delayMax - delayMin) + delayMin);
          // 模拟真实请求头
          const options = {
            headers: {
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
            }
          };
          const response = UrlFetchApp.fetch(`https://www.instagram.com/${username}/?__a=1`, options);
          const data = JSON.parse(response.getContentText());
          targetCell.setValue(data.graphql.user.edge_followed_by.count);
        } catch (e) {
          targetCell.setValue("请求失败");
          console.log(`处理${username}时出错: ${e.message}`);
        }
      }
    }
    
  • 保存脚本后,你可以手动点击运行,或者设置定时触发器(比如每5分钟运行一次,每次处理50行),避免短时间内请求量过大。

2. 改用Instagram官方Graph API(最稳定合规)

如果你的使用场景符合Instagram的服务条款,这是最靠谱的方法——官方API完全不会触发封禁,只要不超过请求限额就行:

  • 先注册Facebook开发者账号,创建应用,申请「Instagram Graph API」的权限(需要验证你的身份,过程有点繁琐,但一次搞定终身省心)
  • 拿到合法的access token后,在Google Sheets里用自定义脚本调用API:
    function getOfficialFollowers(username) {
      const accessToken = "你的官方access token";
      const response = UrlFetchApp.fetch(`https://graph.instagram.com/${username}?fields=followers_count&access_token=${accessToken}`);
      const data = JSON.parse(response.getContentText());
      return data.followers_count || "无效账号";
    }
    
  • 这个方法的好处是完全合规,数据准确,不会有被封禁的风险。

3. 优化现有公式,避免重复请求

如果不想写脚本,先检查你的现有公式:是不是每次刷新表格都会重新发起所有请求?

  • 可以用IF()函数做缓存逻辑,比如把公式改成:
    =IF(B2="", 你的爬取公式, B2)
    
    这样只有空的B列单元格才会发起请求,已经获取到的粉丝数不会重复请求,能大大减少请求量。

4. 模拟真实用户请求头

Instagram会检测请求的User-Agent,Google Sheets默认的请求头很容易被识别成爬虫。如果用的是自定义公式,一定要在请求里加上真实的浏览器User-Agent,甚至可以随机切换不同的UA:

  • 比如在UrlFetchApp的options里添加:
    const userAgents = [
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
      "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Safari/605.1.15"
    ];
    const randomUA = userAgents[Math.floor(Math.random() * userAgents.length)];
    const options = { headers: { 'User-Agent': randomUA } };
    

最后提醒

不管用哪种方法,都要遵守Instagram的服务条款——不要过度爬取,不要用于商业用途(除非获得授权),否则即使绕过了当前封禁,也可能被永久限制访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:03