Скрейпінг у масштабі означає постійну боротьбу з блокуванням IP. Сучасні антибот-системи миттєво виявляють IP дата-центрів, throttle-ять резидентні проксі та ідентифікують патерни в поведінці запитів. Найнадійніше рішення у 2026 році — ротаційні мобільні проксі, справжні 4G/5G IP, які зливаються з легітимним мобільним трафіком.
Цей посібник охоплює налаштування, стратегії ротації та приклади коду для Python-скрейперів.
Мобільні проксі для скрейпінгу
Справжні 4G/5G IP операторів — Україна, Румунія, Латвія. Миттєва ротація через API.
Чому мобільні проксі перевершують дата-центрові для скрейпінгу
Дата-центрові проксі швидкі та дешеві, але легко блокуються, тому що:
- Їх ASN (Amazon, DigitalOcean, Hetzner) добре відомі та занесені у чорні списки
- Діапазони IP невеликі — заблокуйте одну IP, і вся підмережа під підозрою
- Без CGNAT — кожна IP відповідає одному клієнту, легко ідентифікувати
IP мобільних операторів працюють краще, тому що:
- Вони належать легітимним мобільним ASN (Kyivstar, Orange, T-Mobile)
- CGNAT означає, що тисячі реальних користувачів ділять один пул IP
- Блокування IP мобільного оператора зачіпає реальних користувачів — сайти неохоче це роблять
- Діапазони операторів постійно змінюються, коли IP ротуються між SIM-картами
Як працює ротація IP
Мобільні проксі ProxyGrow підтримують два методи ротації:
Ротація за таймером: проксі автоматично змінює вихідну IP кожні N хвилин (мінімум 3 хвилини на Shared-планах, налаштовується на Premium).
Ротація через API: ви звертаєтесь до унікального URL для миттєвої зміни IP. IP змінюється за 3–5 секунд. Дані проксі (host:port:user:pass) залишаються незмінними — змінюється лише вихідна IP.
GET https://your-rotation-url.proxygrow.com/rotate/TOKEN
Ідеально для скрейперів: ротуйте між запитами або після виявлення блокування.
Python: базове налаштування проксі
Бібліотека requests
import requests
proxy = {
'http': 'socks5://user:[email protected]:5000',
'https': 'socks5://user:[email protected]:5000',
}
response = requests.get('https://example.com', proxies=proxy, timeout=15)
print(response.text)
Для SOCKS5 встановіть requests[socks]:
pip install requests[socks]
Ротація IP між запитами
import requests
import time
PROXY = 'socks5://user:[email protected]:5000'
ROTATION_URL = 'https://your-rotation-url'
def rotate_ip():
requests.get(ROTATION_URL, timeout=10)
time.sleep(5) # зачекати поширення зміни IP
def scrape(url):
proxies = {'http': PROXY, 'https': PROXY}
return requests.get(url, proxies=proxies, timeout=15)
urls = ['https://example.com/page/1', 'https://example.com/page/2']
for i, url in enumerate(urls):
if i % 5 == 0 and i > 0:
rotate_ip()
response = scrape(url)
print(response.status_code)
Playwright: скрейпінг браузером
Playwright скрейпить сайти з важким JavaScript. Поєднайте з мобільними проксі для максимальної непомітності.
import asyncio
from playwright.async_api import async_playwright
async def scrape_with_playwright():
async with async_playwright() as p:
browser = await p.chromium.launch(
proxy={
'server': 'socks5://proxy.proxygrow.com:5000',
'username': 'your_user',
'password': 'your_pass',
}
)
page = await browser.new_page()
# Встановіть мобільне вікно перегляду для кращого відповідності відбитку
await page.set_viewport_size({'width': 390, 'height': 844})
await page.goto('https://example.com')
content = await page.content()
print(content[:500])
await browser.close()
asyncio.run(scrape_with_playwright())
Порада: Використовуйте мобільне вікно перегляду (390×844 для iPhone 14), щоб воно відповідало відбитку мобільного проксі. Десктопне вікно з мобільним IP виглядає непослідовно.
Scrapy: великомасштабне сканування
Для великих обсягів сканування Scrapy з ротаційним middleware для проксі є стандартним підходом.
Встановіть middleware:
pip install scrapy-rotating-proxies
settings.py:
ROTATING_PROXY_LIST = [
'socks5://user:[email protected]:5000',
]
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
ROTATING_PROXY_PAGE_RETRY_TIMES = 3
Для одного мобільного проксі з ротацією через API, створіть власний middleware:
# middlewares.py
import requests
import time
class MobileProxyRotateMiddleware:
def __init__(self, rotation_url, rotate_every=10):
self.rotation_url = rotation_url
self.rotate_every = rotate_every
self.request_count = 0
def process_request(self, request, spider):
self.request_count += 1
if self.request_count % self.rotate_every == 0:
requests.get(self.rotation_url, timeout=10)
time.sleep(5)
request.meta['proxy'] = 'socks5://user:[email protected]:5000'
Поради щодо обходу антибот-захисту
Дотримуйтесь затримок між запитами
DOWNLOAD_DELAY = 2 # 2 секунди між запитами
AUTOTHROTTLE_ENABLED = True
Випадкові затримки кращі за фіксовані:
import random
time.sleep(random.uniform(1, 4))
Встановіть реалістичні заголовки
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36',
'Accept-Language': 'uk-UA,uk;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
}
Підбирайте User-Agent під країну проксі. Android-UA українською мовою з Kyivstar IP — достовірна комбінація.
Коректно обробляйте блокування
Виявляйте блокування (403, сторінка CAPTCHA, перенаправлення на антибот-челендж) і ротуйте IP:
def is_blocked(response):
if response.status_code in (403, 429):
return True
if 'captcha' in response.text.lower():
return True
return False
if is_blocked(response):
rotate_ip()
response = scrape(url)
Shared vs Premium для скрейпінгу
| Shared | Premium | |
|---|---|---|
| Швидкість ротації | Мінімум 3 хв | Миттєво |
| Одночасні підключення | Спільні з іншими | Необмежені |
| Швидкість | 10–50 Мбіт/с | до 150 Мбіт/с |
| Найкраще для | Легкий скрейпінг, тестування | Інтенсивний скрейпінг, продакшн |
Для продакшн-скрейперів, що роблять сотні запитів на годину, Premium-плани з миттєвою ротацією та необмеженими підключеннями є правильним вибором.
Отримайте мобільні проксі для скрейпінгу
Миттєва ротація через API · Необмежені підключення на Premium · Реальні IP операторів.