כל הפרויקטים

כלי משיכת פרופיל ופוסטים מאינסטגרם

כלי Python headless שמושך פרופילים, פוסטים ו-Reels מאינסטגרם דרך REST + GraphQL פנימיים.

המטרה

כלי Python חוזר שמושך פרופיל, פוסטים ו-Reels מכל URL באינסטגרם בלי דפדפן — פלט JSON מובנה, pagination מלא עם cookies, תלויות מינימום.

הפתרון

סקריפט CLI יחיד שמזהה סוג URL ומפעיל את שרשרת ה-API המתאימה: לפרופיל, טעינת HTML לחילוץ LSD+cookies, קריאת REST web_profile_info/ עם GraphQL PolarisProfilePageContentQuery כ-fallback. לפוסטים/Reels, PolarisProfilePostsQuery עם cursor pagination. לפוסט/Reel בודד, HTML גולמי + oEmbed ללא auth.

עיקרי הדברים

  • ארבעה סוגי URL מטופלים ב-CLI יחיד
  • Fallback REST → GraphQL מנטרל flakes של 429
  • Auth עם cookies פותח pagination מלא
  • בלי דפדפן — requests טהור, מהיר דרמטית מ-Playwright

האתגר

ה-GraphQL הפנימי של אינסטגרם דוחה בקשות שלא נראות בדיוק כמו דפדפן.

לכידת הבקשה המדויקת מ-DevTools, חילוץ APP_ID/BLOKS_VERSION_ID/DOC_ID לקבועים, ו-GET ראשוני ל-/username/ שמושך LSD + cookies.

ה-REST הציבורי מחזיר 429 לעיתים, במיוחד בלי cookies.

משיכה בשני שלבים — REST ראשון, GraphQL PolarisProfilePageContentQuery כ-fallback ב-429.

GraphQL בלי auth מחזיר רק 12 פריטים — has_next_page false מיד.

קלט cookies דרך --cookies (string) או --cookies-file (JSON); session מתווסף לכל בקשה ומאפשר pagination אמיתי.

URLs בודדים של פוסט/Reel בצורה שונה — ה-GraphQL לא מתאים.

ל-/p/CODE/ ו-/reel/CODE/ שמירת HTML גולמי וקריאה ל-/api/v1/oembed/?url=... למטא-דאטה. שני פלטים ל-URL.

מה נמסר

  • fetch_instagram_profile.py CLI יחיד
  • requirements.txt (תלויות מינימום)
  • Reference captures (web_profile_info, fetch_query, posts_fetch, reels_fetch) + תגובות
  • README עם הוראות חילוץ cookies
  • פלטים לדוגמה

תוצאות

4

סוגי URL

Anonymous / Cookies

מצבי auth

REST → GraphQL

Fallback

Headless (requests)

ריצה

מה זה לימד אותי

  • ל-APIs של אינסטגרם/פייסבוק, לכידת בקשה מדפדפן מהירה מ-reverse engineering
  • Fallback REST → GraphQL הופך 429 ל-non-issue
  • requests headless מהיר דרמטית מ-Playwright כש-APIs זמינים