如何使用Python无需Session下载Instagram Reels、图片、头像及动态?
无需Session ID下载Instagram内容的可行方案
核心思路:利用公开API与无授权访问端点
Instagram的公开账号内容(非私密)可通过未授权的API端点或页面源码解析获取下载链接,不需要Cookie Session ID。以下分类型给出具体实现方案:
1. 头像(DP)下载
头像获取是最直接的,可通过固定格式的API端点获取高清链接:
- 若已知用户ID:请求
https://i.instagram.com/api/v1/users/{user_id}/info/,解析返回JSON中的hd_profile_pic_url_info.url字段 - 若仅知用户名:先请求
https://www.instagram.com/{username}/?__a=1获取用户ID,再用上述端点拿高清头像
示例Python代码:
import requests import json def get_hd_profile_pic(username): 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" } # 第一步:获取用户ID user_info_url = f"https://www.instagram.com/{username}/?__a=1" resp = requests.get(user_info_url, headers=headers) if resp.status_code != 200: return None user_data = json.loads(resp.text) user_id = user_data['graphql']['user']['id'] # 第二步:获取高清头像链接 dp_api_url = f"https://i.instagram.com/api/v1/users/{user_id}/info/" dp_resp = requests.get(dp_api_url, headers=headers) dp_data = json.loads(dp_resp.text) return dp_data['user']['hd_profile_pic_url_info']['url']
2. 公开Reels下载
Reels的公开内容可通过两种方式获取下载链接:
- 页面源码解析:访问Reels网页版URL(
https://www.instagram.com/reel/{reel_id}/),在源码中搜索"video_url"字段提取链接 - 未授权API调用:请求
https://i.instagram.com/api/v1/media/{reel_id}/info/,根据media_type字段判断类型:- 视频Reel:取
video_versions[0].url - 图片Reel:取
image_versions2.candidates[0].url
- 视频Reel:取
示例代码片段:
def get_reel_download_link(reel_id): 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", "Accept-Language": "en-US,en;q=0.9" } api_url = f"https://i.instagram.com/api/v1/media/{reel_id}/info/" resp = requests.get(api_url, headers=headers) if resp.status_code != 200: return None media_data = json.loads(resp.text) if media_data['media_type'] == 2: return media_data['video_versions'][0]['url'] else: return media_data['image_versions2']['candidates'][0]['url']
3. 公开动态(Stories)下载
Stories的未授权访问需要先获取用户的Story列表:
- 请求
https://i.instagram.com/api/v1/feed/user/{user_id}/story/,需携带User-Agent和固定的X-IG-App-ID(可使用936619743392459) - 解析返回JSON中的
items数组,每个Story项根据media_type提取对应链接:- 视频Story:
video_versions[0].url - 图片Story:
image_versions2.candidates[0].url
- 视频Story:
示例代码片段:
def get_story_download_links(user_id): 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", "X-IG-App-ID": "936619743392459" } story_api_url = f"https://i.instagram.com/api/v1/feed/user/{user_id}/story/" resp = requests.get(story_api_url, headers=headers) if resp.status_code != 200: return [] story_data = json.loads(resp.text) download_links = [] for item in story_data.get('items', []): if item['media_type'] == 2: download_links.append(item['video_versions'][0]['url']) else: download_links.append(item['image_versions2']['candidates'][0]['url']) return download_links
4. 公开帖子图片/视频下载
普通公开帖子的下载逻辑和Reels一致,使用https://i.instagram.com/api/v1/media/{post_id}/info/端点,根据media_type提取对应链接即可。
关键注意事项
- User-Agent模拟:必须设置真实的浏览器User-Agent,否则会被Instagram返回403错误
- API稳定性:Instagram的未授权API端点可能随时变更,需定期测试调整
- 账号权限限制:所有无需Session ID的方法仅适用于公开账号,私密账号内容必须登录后才能访问
- 速率控制:避免高频请求,否则会触发IP封禁
内容的提问来源于stack exchange,提问作者FAB TECH
相关产品推荐
相关产品推荐

