如何使用Requests模块实现Instagram登录并关注目标账号?
使用Requests实现Instagram登录后关注指定账号
核心改进点
- 改用
requests.Session()管理会话,自动维护cookies,无需手动提取和传递参数,避免出错 - 先获取目标账号的
user_id(Instagram关注接口仅接受用户ID,不支持直接使用用户名) - 构造符合平台要求的关注请求,携带必要的请求头和参数
步骤详解
用Session替代单次请求
Session会自动保存登录后的所有cookies,后续请求直接复用即可,不用手动处理csrf_token和session_id,大幅降低出错概率。获取目标账号的user_id
调用Instagram的用户信息接口,传入目标用户名,解析返回的JSON数据提取user_id,接口地址为https://www.instagram.com/{target_username}/?__a=1。发送关注请求
向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
相关产品推荐
相关产品推荐

