Instagram và TikTok là hai mục tiêu chính thống khó nhất trong scraping — khó hơn Google, khó hơn Amazon. Cả hai đều chạy chấm điểm IP gắt gao, cả hai đều fingerprint client của bạn ở nhiều lớp, và cả hai đều nổi tiếng với kiểu chặn mềm: thay vì một lỗi 403 rõ ràng, bạn nhận được tường đăng nhập, JSON rỗng, "challenge_required", hoặc kết quả bị cắt bớt âm thầm. Scraper của bạn "chạy được" mà dữ liệu thì rác.
Hướng dẫn này trình bày cách mỗi nền tảng thực sự chặn bạn trong năm 2026, cấu hình proxy có thể sống sót, và các mẫu yêu cầu giữ cho tài khoản và phiên luôn sống. (Để quản lý đa tài khoản thay vì scrape, xem hướng dẫn AdsPower/Multilogin và GoLogin/Dolphin Anty của chúng tôi.)
challenge_required. Mức độ khoan dung của Instagram với các IP dân cư dùng chung/bị lạm dụng cũng thấp — chất lượng pool ở đây quan trọng hơn gần như bất cứ nơi nào khác.X-Bogus/chữ ký do JavaScript được làm rối tạo ra. Scrape thuần HTTP có nghĩa là phải reverse-engineer các chữ ký xoay vòng vài tuần một lần — phần lớn các nhóm chạy một trình duyệt thật (Playwright) thay vào đó và chặn bắt các phản hồi JSON.itemList rỗng trông như "không còn nội dung").# Một danh tính = một phiên sticky, ghim theo quốc gia
socks5h://USERNAME:[email protected]:913
Xoay vòng theo từng yêu cầu thì ổn cho các trang công khai ẩn danh ở khối lượng thấp. Ngay khi có một cookie-phiên hay đăng nhập tham gia, hãy chuyển sang sticky — cookie và IP phải di chuyển như một danh tính duy nhất (tại sao).
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"])
Hãy quan sát phản hồi, không phải mã trạng thái: một 200 với {"data": null} hoặc một chuyển hướng đến /accounts/login/ nghĩa là ngân sách của IP này đã cạn — xoay danh tính, lùi lại, rồi tiếp tục.
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")
Cách này né hoàn toàn việc reverse-engineer chữ ký: trang tự tạo X-Bogus hợp lệ, và bạn thu hoạch JSON. Proxy phải được thiết lập khi khởi chạy trình duyệt — các điểm trớ trêu về xác thực được trình bày trong xác thực proxy Playwright.
challenge_required, itemList rỗng với hasMore: true.| TikTok | ||
|---|---|---|
| Tuyến truy cập tốt nhất | Endpoint Web GraphQL/API, curl_cffi | Playwright + chặn bắt phản hồi |
| Loại proxy | Dân cư sticky theo từng danh tính | Dân cư, khớp địa lý với thị trường |
| IP trung tâm dữ liệu | Tường đăng nhập / challenge | Captcha ngay lập tức |
| Tín hiệu chặn mềm | chuyển hướng đăng nhập, challenge_required, dữ liệu null | itemList rỗng, trang captcha |
| Độ nhạy địa lý | Trung bình | Cao — nội dung khác theo quốc gia |
Ghim theo quốc gia, phiên sticky, ASN sạch — 500MB tín dụng miễn phí, không cần thẻ.
Bắt đầu dùng thử miễn phíNgười dùng mới nhận 500MB khi đăng ký, cùng tiền thưởng cho lần nạp đầu tiên. Ưu đãi có thời hạn.