Масштабный веб-скрейпинг неизбежно сталкивается с блокировками IP. Современные антибот-системы мгновенно вычисляют датацентровые IP, тротлят резидентские прокси и выявляют паттерны в поведении запросов. Наиболее надёжное решение в 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
Это идеально для скрейперов: меняйте IP между запросами или при обнаружении блокировки.
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()
# Установите мобильный viewport для лучшего совпадения отпечатка
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())
Совет: Используйте мобильный viewport (390×844 для iPhone 14), чтобы он соответствовал отпечатку мобильного прокси. Десктопный viewport с мобильным 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 с украинскими настройками и IP Kyivstar — правдоподобная комбинация.
Корректно обрабатывайте блокировки
Определяйте блокировки (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 операторов.