Instagram и TikTok — две самые тяжёлые массовые цели для скрейпинга, тяжелее Google, тяжелее Amazon. Обе агрессивно оценивают репутацию IP, обе снимают отпечаток клиента сразу на нескольких уровнях и обе славятся мягкой блокировкой: вместо честного 403 вы получаете стену логина, пустой JSON, "challenge_required" или молча обрезанные результаты. Скрейпер вроде бы "работает", а данные — мусор.
В этом гайде разберём, как каждая платформа реально вас блокирует в 2026 году, какая настройка прокси выживает и какие паттерны запросов сохраняют аккаунты и сессии живыми. (Если вам нужно управление множеством аккаунтов, а не скрейпинг, смотрите наши гайды по AdsPower/Multilogin и GoLogin/Dolphin Anty.)
challenge_required. Терпимость Instagram к общим/затёртым резидентным IP тоже низкая — качество пула здесь важнее, чем почти где-либо ещё.X-Bogus/подписи, которые генерирует обфусцированный JavaScript. Чисто HTTP-скрейпинг означает реверс-инжиниринг подписей, меняющихся каждые пару недель — большинство команд вместо этого запускают настоящий браузер (Playwright) и перехватывают JSON-ответы.itemList, которые выглядят как "контент закончился").# Одна личность = одна sticky-сессия, привязанная к стране
socks5h://USERNAME:[email protected]:913
Ротация на каждый запрос годится для анонимных публичных страниц при малых объёмах. Как только в игру вступает сессионная cookie или логин — переключайтесь на sticky: cookie и IP должны двигаться как одна личность (почему).
from curl_cffi import requests
PROXY = {"https": "socks5h://USERNAME:[email protected]:913"}
# Публичный JSON профиля (без логина) - имитируем TLS Chrome
r = requests.get(
"https://www.instagram.com/api/v1/users/web_profile_info/?username=nasa",
impersonate="chrome",
headers={"X-IG-App-ID": "936619743392459"},
proxies=PROXY,
)
data = r.json()["data"]["user"]
print(data["edge_followed_by"]["count"])
Смотрите на тело ответа, а не на код статуса: 200 с {"data": null} или редирект на /accounts/login/ означает, что бюджет этого IP исчерпан — смените личность, сделайте паузу и продолжайте.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "us.jibaoproxy.com:913",
"username": "USERNAME", "password": "PASSWORD",
})
page = browser.new_page()
items = []
# Пусть JS самого TikTok подписывает запросы; мы лишь читаем ответы
page.on("response", lambda res:
items.extend(res.json().get("itemList", []))
if "/api/post/item_list" in res.url else None)
page.goto("https://www.tiktok.com/@nasa")
for _ in range(5):
page.mouse.wheel(0, 2500)
page.wait_for_timeout(1800) # человекоподобный темп прокрутки
print(len(items), "videos captured")
Это полностью обходит реверс-инжиниринг подписей: страница сама генерирует валидный X-Bogus, а вы собираете JSON. Прокси нужно задать при запуске браузера — нюансы аутентификации описаны в аутентификации прокси в Playwright.
challenge_required, пустой itemList при hasMore: true.| TikTok | ||
|---|---|---|
| Лучший путь доступа | Веб GraphQL/API эндпоинты, curl_cffi | Playwright + перехват ответов |
| Тип прокси | Резидентные sticky на личность | Резидентные, по гео под рынок |
| Дата-центровые IP | Стена логина / challenge | Моментальная captcha |
| Сигнал мягкого блока | редирект на логин, challenge_required, null-данные | пустой itemList, страница captcha |
| Чувствительность к гео | Средняя | Высокая — контент различается по стране |
Привязка к стране, sticky-сессии, чистые ASN — $5 бесплатного баланса, без карты.
Начать бесплатноНовым пользователям — 5U при регистрации, бонус к первому пополнению. Акция ограничена по времени.