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

如何使用Requests模块实现Instagram登录并关注目标账号?

使用Requests实现Instagram登录后关注指定账号

核心改进点

  • 改用requests.Session()管理会话,自动维护cookies,无需手动提取和传递参数,避免出错
  • 先获取目标账号的user_id(Instagram关注接口仅接受用户ID,不支持直接使用用户名)
  • 构造符合平台要求的关注请求,携带必要的请求头和参数

步骤详解

  1. 用Session替代单次请求
    Session会自动保存登录后的所有cookies,后续请求直接复用即可,不用手动处理csrf_token和session_id,大幅降低出错概率。

  2. 获取目标账号的user_id
    调用Instagram的用户信息接口,传入目标用户名,解析返回的JSON数据提取user_id,接口地址为https://www.instagram.com/{target_username}/?__a=1。

  3. 发送关注请求
    向https://www.instagram.com/web/friendships/{user_id}/follow/发送POST请求,携带Session自动更新的csrf_token及符合浏览器标准的请求头。

完整代码

import json
from datetime import datetime
import requests

def get_user_id(session, target_username):
    """获取目标账号的user_id"""
    user_info_url = f"https://www.instagram.com/{target_username}/?__a=1"
    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",
        "Referer": "https://www.instagram.com/"
    }
    response = session.get(user_info_url, headers=headers)
    if response.status_code == 200:
        data = json.loads(response.text)
        return data["graphql"]["user"]["id"]
    else:
        print(f"获取用户信息失败,状态码:{response.status_code}")
        return None

def follow_user(session, user_id):
    """发送关注请求"""
    follow_url = f"https://www.instagram.com/web/friendships/{user_id}/follow/"
    csrf_token = session.cookies.get("csrftoken")
    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",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "https://www.instagram.com/",
        "x-csrftoken": csrf_token,
        "X-Instagram-AJAX": "1",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    response = session.post(follow_url, headers=headers)
    if response.status_code == 200:
        data = json.loads(response.text)
        if data.get("result") == "following":
            print("关注成功!")
        else:
            print("关注操作失败:", data.get("message"))
    else:
        print(f"关注请求失败,状态码:{response.status_code}")

if __name__ == "__main__":
    username = input("User Name: ")
    password = input("User Password: ")
    target_account = input("Enter username to follow: ")

    # 初始化会话
    session = requests.Session()

    # 访问登录页面获取初始csrf_token
    login_page_url = "https://www.instagram.com/accounts/login/"
    session.get(login_page_url)
    initial_csrf = session.cookies.get("csrftoken")

    # 构造登录请求
    login_url = "https://www.instagram.com/accounts/login/ajax/"
    timestamp = int(datetime.now().timestamp())
    payload = {
        'username': username,
        'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{timestamp}:{password}',
        'queryParams': {},
        'optIntoOneTap': 'false'
    }
    login_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",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "https://www.instagram.com/accounts/login/",
        "x-csrftoken": initial_csrf
    }

    login_response = session.post(login_url, data=payload, headers=login_headers)
    json_data = json.loads(login_response.text)

    if json_data.get("authenticated"):
        print("登录成功")
        # 获取目标账号ID并执行关注
        user_id = get_user_id(session, target_account)
        if user_id:
            follow_user(session, user_id)
    else:
        print("登录失败:", login_response.text)

注意事项

  • User-Agent更新:尽量使用较新的浏览器UA,避免被Instagram识别为爬虫
  • 反爬限制:频繁请求可能触发平台限制,建议添加适当延迟
  • 密码格式:代码中使用的#PWD_INSTAGRAM_BROWSER是网页端密码加密格式,若该格式失效需对应更新
  • 账号权限:确保你的账号未被限制关注操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:57:10