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

Python Requests在服务器无法获取Instagram账号数据的问题排查

问题分析与解决方案

核心原因

服务器环境的请求被Instagram识别为自动化/非浏览器请求,返回的页面内容与本地虚拟机存在差异,导致你依赖apparent_encoding的判断逻辑完全失效。Instagram会通过请求头(如默认的python-requests标识)、IP特征等识别自动化工具,服务器IP大概率已被纳入监控范围。

具体解决步骤

1. 添加浏览器模拟请求头

给请求添加真实浏览器的User-Agent,避免被直接识别为机器人:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

请求时传入该参数:r = requests.get(f"https://www.instagram.com/{i}/", headers=headers)

2. 替换为更可靠的账号存在判断逻辑

依赖apparent_encoding的判断方式极不稳定,建议改用以下两种更可靠的方法:

  • 检查页面是否包含不存在账号的固定标识文本(如"Sorry, this page isn't available.")
  • 结合响应URL判断是否被重定向到登录页/非用户主页

修改后的完整代码示例:

import requests

exist = []
url_list = []
cli = ["nike", "duolingo", "duolingoindo"]
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

for username in cli:
    target_url = f"https://www.instagram.com/{username}/"
    try:
        r = requests.get(target_url, headers=headers, allow_redirects=True)
        # 检查是否被重定向到登录页,需额外处理验证
        if "accounts/login" in r.url:
            print(f"{username}: 触发反爬,需验证")
            continue
        # 检查页面是否存在账号不存在的标识
        if "Sorry, this page isn't available." not in r.text:
            exist.append(username)
            url_list.append(target_url)
            print(f"{username}: Exist")
        else:
            print(f"{username}: Not Exist")
    except Exception as e:
        print(f"{username}: 请求失败 - {str(e)}")

3. 处理IP限制问题

如果添加请求头后仍无效,大概率是服务器IP被Instagram限制:

  • 使用代理IP分散请求来源
  • 降低请求频率,避免短时间内批量请求触发反爬机制

4. 排查响应内容差异

在服务器上打印响应的前500个字符,对比本地虚拟机的响应内容,确认是否被拦截或返回了完全不同的页面:

print(r.text[:500])

通过直接对比内容,可以快速定位服务器请求是否被篡改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:25:21