Ang Instagram at TikTok ang dalawang pinakamahirap na mainstream na target sa scraping — mas mahirap kaysa Google, mas mahirap kaysa Amazon. Pareho silang nagpapatakbo ng agresibong IP scoring, pareho silang nag-fi-fingerprint ng iyong client sa maraming layer, at pareho silang kilala sa soft block: sa halip na malinis na 403, makakakuha ka ng login walls, walang laman na JSON, "challenge_required", o tahimik na pinutol na mga resulta. "Gumagana" ang iyong scraper at basura ang iyong data.
Sinasaklaw ng gabay na ito kung paano ka aktwal na nia-block ng bawat platform sa 2026, ang proxy setup na nakakaligtas, at ang mga request pattern na nagpapanatiling buhay sa mga account at session. (Para sa multi-account na management sa halip na scraping, tingnan ang aming mga gabay sa AdsPower/Multilogin at GoLogin/Dolphin Anty.)
challenge_required. Mababa rin ang tolerance ng Instagram para sa shared/abused residential IPs — mas mahalaga dito ang kalidad ng pool kaysa halos saanman.X-Bogus/signature parameters na nilikha ng obfuscated JavaScript. Ang pure-HTTP scraping ay nangangahulugang reverse-engineering ng signatures na nag-iiba kada ilang linggo — karamihan ng team ay nagpapatakbo ng tunay na browser (Playwright) sa halip at ini-intercept ang JSON responses.itemList responses na mukhang "wala nang content").# One identity = one sticky session, country-pinned
socks5h://USERNAME:[email protected]:913
Ang rotating-per-request ay ayos lang para sa anonymous public pages sa mababang volume. Sa sandaling sangkot ang isang session cookie o login, lumipat sa sticky — ang cookie at IP ay dapat gumalaw bilang isang identity (bakit).
from curl_cffi import requests
PROXY = {"https": "socks5h://USERNAME:[email protected]:913"}
# Public profile JSON (no login) - impersonate Chrome's TLS
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"])
Bantayan ang response, hindi ang status code: ang 200 na may {"data": null} o redirect sa /accounts/login/ ay nangangahulugang ubos na ang budget ng IP na ito — i-rotate ang identity, mag-back off, at magpatuloy.
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 = []
# Let TikTok's own JS sign the requests; we just read the answers
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) # human-ish scroll cadence
print(len(items), "videos captured")
Iniiwasan nito nang buo ang signature reverse-engineering: ang page mismo ang lumilikha ng valid na X-Bogus, at ina-ani mo ang JSON. Dapat naka-set ang proxy sa browser launch — ang auth quirks ay tinatalakay sa Playwright proxy authentication.
challenge_required, walang lamang itemList na may hasMore: true.| TikTok | ||
|---|---|---|
| Pinakamahusay na access path | Web GraphQL/API endpoints, curl_cffi | Playwright + response interception |
| Proxy type | Residential sticky bawat identity | Residential, geo-matched sa market |
| Datacenter IPs | Login wall / challenge | Agarang captcha |
| Soft-block signal | login redirect, challenge_required, null data | walang lamang itemList, captcha page |
| Geo sensitivity | Katamtaman | Mataas — nagkakaiba ang content ayon sa bansa |
Country-pinned, sticky sessions, malinis na ASNs — 500MB ng libreng traffic, walang card kailangan.
Simulan ang Libreng TrialAng mga bagong user ay makakatanggap ng 500MB sa pagrehistro, kasama ang bonus sa unang recharge. Limitadong oras lang ang alok.