Технологии и защита 14 мин чтения

Прокси для парсинга: полный гид по типам, приватности и детекту

Гид по прокси для парсинга: датацентровые, резидентные и мобильные, ротация, проверка приватности и защита от детекта.

КP
Команда Parsing.agency
Сбор данных под задачи бизнеса
Опубликовано: 25 апреля 2025

Парсинг (web scraping) почти всегда упирается в одну и ту же стену: сайт видит, что с одного IP-адреса прилетает подозрительно много запросов, и начинает блокировать, показывать капчу или отдавать «пустые» страницы. Прокси решают эту проблему — они подменяют ваш реальный IP на чужой и распределяют нагрузку. Но прокси прокси рознь: их десятки видов, и от выбора зависит, пройдёт ваш парсер незаметно или сгорит на первой сотне запросов.

Ниже — разбор всех основных типов прокси, их свойств, уровней приватности, тарификации, а также примеры кода на нескольких языках.


Что такое прокси и зачем он при парсинге

Прокси-сервер — это посредник между вашим парсером и целевым сайтом. Запрос идёт не напрямую, а через прокси: сайт видит IP прокси, а не ваш. При парсинге это даёт три вещи:

  1. Сокрытие реального IP — вас сложнее идентифицировать и забанить лично.
  2. Распределение нагрузки — пул из сотен IP позволяет слать много запросов, не превышая лимиты на каждый отдельный адрес.
  3. Обход гео-ограничений — можно собирать данные так, будто вы находитесь в нужной стране (цены, выдача, контент часто зависят от региона).

Классификация по протоколу: HTTP, HTTPS, SOCKS

Это первое, что нужно понимать — на каком уровне работает прокси.

HTTP-прокси

Работает только с HTTP-трафиком. Он «понимает» структуру HTTP-запроса, может читать и модифицировать заголовки, кэшировать ответы. Для парсинга обычных сайтов этого часто достаточно.

HTTPS-прокси (HTTP CONNECT)

То же самое, но умеет туннелировать зашифрованный TLS-трафик через метод CONNECT. Прокси не видит содержимое (оно зашифровано), а просто пробрасывает байты. Сегодня почти весь веб на HTTPS, поэтому поддержка CONNECT обязательна.

SOCKS4 и SOCKS5

SOCKS работает на более низком уровне — это универсальный туннель для любого TCP-трафика (а SOCKS5 ещё и UDP). Прокси не вникает в содержимое: ему всё равно, HTTP это, FTP, WebSocket или что-то ещё.

В чём разница между SOCKS и HTTP-прокси:

HTTP(S) SOCKS5
Уровень Прикладной (понимает HTTP) Транспортный (просто гонит TCP/UDP)
Может читать/менять заголовки Да Нет
Кэширование Возможно Нет
Протоколы Только HTTP/HTTPS Любые TCP, плюс UDP
Скорость Чуть выше накладные расходы Обычно быстрее, «прозрачнее»
Аутентификация Basic/Digest Логин-пароль, GSSAPI

Разница SOCKS4 vs SOCKS5:

  • SOCKS4 — старый, не поддерживает аутентификацию по паролю, IPv6 и UDP, и не умеет резолвить DNS на стороне прокси (домен превращается в IP на вашей стороне — это утечка, по DNS-запросам можно понять, что вы парсите).
  • SOCKS5 — поддерживает аутентификацию, IPv6, UDP и удалённый DNS-резолвинг (socks5h в URL-схеме). Для парсинга предпочтительнее, потому что DNS не утекает.

Практическое правило: если выбираете между ними, берите SOCKS5 (а в коде используйте схему socks5h://, чтобы DNS резолвился через прокси).


Классификация по источнику IP

Гораздо важнее протокола то, откуда взялся IP-адрес. Именно это определяет, насколько «человеческим» вы выглядите для антибот-систем.

Датацентр-прокси (Datacenter)

IP принадлежат хостинг-провайдерам и дата-центрам (AWS, OVH, Hetzner и т.д.).

  • ➕ Дёшевые, очень быстрые, доступны тысячами.
  • ➖ Легко детектятся: антибот-системы держат базы подсетей дата-центров. Многие сайты блокируют такие IP превентивно.
  • Подходят для парсинга «лояльных» сайтов без серьёзной защиты.

Резидентные прокси (Residential)

IP реальных домашних пользователей, выданные интернет-провайдерами (ISP). Трафик идёт через устройства живых людей (часто через P2P-сети или SDK в приложениях).

  • ➕ Выглядят как обычные пользователи, их трудно отличить от живого трафика.
  • ➖ Дороже, медленнее, иногда нестабильны.
  • Подходят для сайтов с серьёзной защитой (маркетплейсы, соцсети, поисковики).

Мобильные прокси (Mobile)

IP мобильных операторов (3G/4G/5G). Особенность: операторы используют CGNAT — за одним IP сидят сотни реальных абонентов.

  • ➕ Самый высокий уровень доверия: забанить такой IP = забанить кучу реальных людей, поэтому сайты осторожны.
  • ➖ Самые дорогие, скорость и стабильность ниже.
  • Применяют там, где всё остальное банится моментально.

ISP-прокси (Static Residential)

Гибрид: IP формально принадлежат интернет-провайдеру (как резидентные), но физически размещены в дата-центре (как датацентр-прокси).

  • ➕ Скорость дата-центра + репутация провайдера. Статичны (не меняются), что удобно для долгих сессий.
  • ➖ Дороже датацентровых.

Краткое сравнение по «незаметности» и цене:

code
Датацентр   →  ISP   →  Резидентные  →  Мобильные
дешевле/                            дороже/
заметнее                            незаметнее

IPv4 vs IPv6

Адресное пространство IPv4 закончилось — адресов мало, и они дорогие. IPv6 практически бесконечен, поэтому IPv6-прокси заметно дешевле.

Но есть подвох: прокси по IPv6 работают, только если целевой сайт поддерживает IPv6. Многие крупные сайты до сих пор только на IPv4 — тогда IPv6-прокси к ним просто не подключится.

IPv4 IPv6
Доступность адресов Дефицит Практически бесконечно
Цена прокси Выше Ниже
Совместимость с сайтами Почти везде Только если сайт на IPv6
Детект IPv4 «привычнее» антиботам Огромные подсети одного провайдера легче банить целыми блоками

Вывод: IPv6 выгоден по цене для парсинга сайтов, которые точно поддерживают IPv6 (Google, многие зарубежные сервисы). Для остального и для максимальной совместимости — IPv4.


Уровни приватности (анонимности) прокси

Прокси может «выдавать» вас разными способами — добавляя в запрос служебные HTTP-заголовки. По тому, что именно передаётся, выделяют три уровня.

1. Transparent (прозрачный)

Передаёт ваш реальный IP в заголовках и честно сообщает, что это прокси.

code
Via: 1.1 proxy
X-Forwarded-For: ВАШ_РЕАЛЬНЫЙ_IP

Для парсинга бесполезен — сайт видит и факт прокси, и вас. Часто такие прокси стоят в корпоративных/публичных сетях для кэширования.

2. Anonymous (анонимный)

Скрывает ваш реальный IP, но не скрывает сам факт использования прокси.

code
Via: 1.1 proxy
X-Forwarded-For: IP_ПРОКСИ   (или отсутствует, но Via выдаёт прокси)

Реальный IP защищён, но антибот-система видит метку «это прокси» и может отнестись с подозрением.

3. Elite / High Anonymous (элитный)

Не передаёт ни ваш IP, ни признаков прокси. Запрос выглядит так, будто вы ходите напрямую.

code
(никаких Via, X-Forwarded-For, X-Real-IP, Proxy-Connection)

Почему одни прокси передают данные, а другие нет? Дело в конфигурации самого прокси-сервера. Транспарентные намеренно добавляют X-Forwarded-For, чтобы целевой сервер знал исходного клиента (так задумано для кэширующих/корпоративных прокси). Элитные настроены вычищать все эти заголовки. Заголовки, по которым палятся прокси: Via, X-Forwarded-For, X-Real-IP, Forwarded, Proxy-Connection, X-Proxy-ID.

Для парсинга нужны только Elite-прокси. Anonymous — на свой страх и риск, Transparent — никогда.


Ротация: статические и ротируемые прокси

  • Статические (sticky) — один и тот же IP держится долго. Нужны там, где требуется сессия (логин, корзина), чтобы сайт не «терял» вас при смене IP.
  • Ротируемые (rotating) — IP меняется автоматически: на каждый запрос или раз в N минут. Идеальны для массового сбора, где сессия не важна. Часто провайдер даёт один «шлюз»-endpoint, а ротацию делает на своей стороне из пула в тысячи адресов.

TOR как бесплатный прокси

TOR (The Onion Router) — анонимная сеть, в которой трафик проходит через цепочку из трёх узлов (нод): входной (guard/entry), промежуточный (middle) и выходной (exit). Каждый слой шифрования снимается на своём узле — отсюда «луковая» маршрутизация. Локально TOR поднимает SOCKS5-прокси (по умолчанию порт 9050), к которому можно подключить парсер.

Да, в TOR тоже есть выбор гео и нод. Через конфиг torrc можно управлять, через какие страны выходить в интернет:

code
# Выходить только через ноды в этих странах
ExitNodes {us},{de},{nl}
StrictNodes 1

# Можно жёстко задать входные/выходные узлы по странам
EntryNodes {de}
ExcludeNodes {ru},{cn}
ExcludeExitNodes {ru}

Коды стран — в фигурных скобках по ISO ({us}, {de}, {fr}). StrictNodes 1 запрещает выходить за пределы заданного списка. Сменить цепочку (получить новый выходной IP) можно отправив сигнал NEWNYM на управляющий порт.

Минусы TOR для парсинга:

  • Медленный — три прыжка плюс перегруженность сети.
  • Exit-ноды в чёрных списках — список выходных узлов публичен, многие сайты блокируют весь TOR превентивно.
  • Маленький пул IP — выходных нод тысячи, а не миллионы, как у резидентных провайдеров. Ротация ограничена.
  • Подходит для разовых задач и эксперимента, но не для промышленного парсинга.

Бесплатные списки прокси

В интернете полно сайтов с бесплатными списками прокси (free proxy lists) — тысячи IP:порт, которые можно скачать прямо сейчас. Звучит заманчиво, но качество у них стабильно плохое:

  • Большинство мертвы уже к моменту, когда вы их скачали — живёт хорошо если 5–20%.
  • Медленные и нестабильные — то отвечают, то нет.
  • Часто транспарентные — сливают ваш IP.
  • Уже в чёрных списках — их использовали тысячи людей до вас, серьёзные сайты их давно забанили.
  • Риск безопасности — неизвестно, кто держит прокси; он может перехватывать/подменять трафик (особенно опасно для незашифрованного HTTP и при передаче логинов).

Вывод: бесплатные прокси годятся для учёбы и одноразовых экспериментов, но для любого серьёзного или коммерческого парсинга нужны платные. Именно поэтому любой публичный прокси перед использованием обязательно надо проверять (см. ниже).


Проверка (чекинг) прокси

Прокси нельзя просто взять и использовать — особенно из публичных списков. Их нужно чекать, потому что они постоянно «умирают», тормозят и меняют поведение. Что проверяют:

  1. Живой ли — отвечает ли вообще, какой код возврата.
  2. Скорость / задержка — время ответа (ping, время до первого байта). Медленные отбраковывают.
  3. Уровень анонимности — не сливает ли ваш реальный IP. Делается запросом на сервис-эхо (например, эндпоинт, возвращающий ваш IP и заголовки), и сверкой: виден ли X-Forwarded-For, Via.
  4. Реальное гео — IP может заявляться как «немецкий», а на деле быть в другой стране. Проверяют по GeoIP-базе.
  5. Тип/репутация — не в чёрных ли списках, не помечен ли как датацентр/прокси (через сервисы fraud-score).
  6. Поддержка HTTPS — проходит ли CONNECT, не ломает ли TLS.

Простейший чекер на Python — пробуем достучаться до эхо-сервиса через прокси и смотрим, что вернулось:

python
import requests

def check_proxy(proxy: str, timeout: int = 8):
    proxies = {"http": proxy, "https": proxy}
    try:
        r = requests.get("https://httpbin.org/get",
                         proxies=proxies, timeout=timeout)
        data = r.json()
        origin_ip = data.get("origin")
        headers = data.get("headers", {})
        leaked = any(h in headers for h in
                     ("X-Forwarded-For", "Via", "X-Real-Ip"))
        return {
            "ok": True,
            "ip": origin_ip,
            "anonymous": not leaked,   # True = реальный IP не утёк
            "latency": r.elapsed.total_seconds(),
        }
    except Exception as e:
        return {"ok": False, "error": str(e)}

print(check_proxy("http://user:pass@1.2.3.4:8080"))

Как прокси влияют на детект при парсинге

Сам по себе прокси — не «шапка-невидимка». Антибот-системы (Cloudflare, DataDome, PerimeterX/HUMAN, Akamai) смотрят на множество сигналов, и IP — лишь один из них.

Что выдаёт парсер по линии IP:

  • Тип IP. Дата-центровые подсети известны и помечаются как «не человек». Резидентные и мобильные вызывают больше доверия. Это главный фактор, на который влияет выбор прокси.
  • Репутация IP (fraud score). История адреса: спам, ботнеты, прошлые баны. «Грязный» IP палится даже если он резидентный.
  • Частота запросов с одного IP (rate limiting). Слишком много запросов в секунду = бан. Пул прокси с ротацией размазывает нагрузку и снижает частоту на каждый адрес.
  • Геораспределение. Если «один пользователь» за минуту прыгает из США в Бразилию и обратно — это явный бот. Поэтому в рамках одной сессии IP лучше держать стабильным.
  • ASN. Номер автономной системы выдаёт, кому принадлежит IP (хостинг или реальный провайдер).

Чего прокси НЕ закрывают (и почему одного прокси мало):

  • TLS/JA3-fingerprint — отпечаток вашего TLS-рукопожатия. У requests/curl он не как у браузера, и его видно сквозь любой прокси.
  • HTTP-заголовки и их порядок — кривой или нестандартный User-Agent, отсутствие привычных браузерных заголовков.
  • Browser fingerprint — Canvas, WebGL, шрифты, JS-окружение (актуально для headless-браузеров).
  • Поведение — слишком быстрые, слишком ровные, «нечеловеческие» паттерны кликов и переходов.

Вывод: качественный прокси (резидентный/мобильный, elite, с хорошей репутацией) резко снижает детект по IP, но его нужно сочетать с правильными заголовками, реалистичным fingerprint и адекватной скоростью запросов. Прокси — необходимое, но не достаточное условие.


Тарификация: за что вы платите

Провайдеры берут деньги по-разному, и от модели зависит, что выгоднее под вашу задачу.

  • За трафик (per GB). Платите за гигабайты прошедших данных, IP-пул при этом огромный и «бесплатный». Типично для резидентных/мобильных. Опасно при парсинге «тяжёлых» страниц с картинками/видео — счёт быстро растёт. Экономия: качать только HTML, блокировать загрузку медиа.
  • За количество IP (per IP). Платите за конкретные адреса (например, 100 статических датацентр/ISP-прокси), трафик безлимитный. Выгодно при больших объёмах данных и стабильных IP.
  • За порты/потоки (per port / per thread). Платите за число одновременных подключений, а не за объём. Часто у мобильных прокси.
  • За запросы (per request) или подписка. Характерно для готовых scraping API, где провайдер сам крутит прокси и отдаёт готовый HTML.

Как выбрать: много мелких запросов лёгких страниц → выгоднее per-GB или per-request; перекачка больших объёмов → выгоднее per-IP с безлимитным трафиком.


Примеры кода: подключение к прокси на разных языках

Формат строки прокси почти везде одинаков: схема://логин:пароль@хост:порт, например http://user:pass@1.2.3.4:8080.

Python — requests (синхронно)

python
import requests

proxies = {
    "http":  "http://user:pass@1.2.3.4:8080",
    "https": "http://user:pass@1.2.3.4:8080",
}

r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(r.json())

# SOCKS5 с удалённым DNS (нужен пакет: pip install requests[socks])
socks = {"http": "socks5h://user:pass@1.2.3.4:1080",
         "https": "socks5h://user:pass@1.2.3.4:1080"}
print(requests.get("https://httpbin.org/ip", proxies=socks).json())

Python — httpx (асинхронно, с ротацией)

python
import asyncio, httpx, random

POOL = [
    "http://user:pass@1.2.3.4:8080",
    "http://user:pass@5.6.7.8:8080",
]

async def fetch(url):
    proxy = random.choice(POOL)          # случайный IP из пула на каждый запрос
    async with httpx.AsyncClient(proxy=proxy, timeout=10) as client:
        resp = await client.get(url)
        return resp.status_code, resp.text[:80]

async def main():
    tasks = [fetch("https://httpbin.org/ip") for _ in range(5)]
    for code, body in await asyncio.gather(*tasks):
        print(code, body)

asyncio.run(main())

Python — TOR (SOCKS5 + смена цепочки)

python
import requests
from stem import Signal
from stem.control import Controller

proxies = {"http":  "socks5h://127.0.0.1:9050",
           "https": "socks5h://127.0.0.1:9050"}

print(requests.get("https://httpbin.org/ip", proxies=proxies).json())

# Запросить новый выходной IP (новую цепочку)
with Controller.from_port(port=9051) as c:
    c.authenticate(password="ваш_пароль")
    c.signal(Signal.NEWNYM)

Node.js — axios + HttpsProxyAgent

javascript
const axios = require("axios");
const { HttpsProxyAgent } = require("https-proxy-agent");

const agent = new HttpsProxyAgent("http://user:pass@1.2.3.4:8080");

axios.get("https://httpbin.org/ip", { httpsAgent: agent, httpAgent: agent })
  .then(res => console.log(res.data))
  .catch(err => console.error(err.message));

Node.js — SOCKS5

javascript
const axios = require("axios");
const { SocksProxyAgent } = require("socks-proxy-agent");

// socks5h:// — DNS резолвится на стороне прокси
const agent = new SocksProxyAgent("socks5h://user:pass@1.2.3.4:1080");

axios.get("https://httpbin.org/ip", { httpAgent: agent, httpsAgent: agent })
  .then(res => console.log(res.data));

Node.js — Puppeteer (headless-браузер через прокси)

javascript
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({
    args: ["--proxy-server=http://1.2.3.4:8080"],
  });
  const page = await browser.newPage();
  // авторизация на прокси, если нужна
  await page.authenticate({ username: "user", password: "pass" });
  await page.goto("https://httpbin.org/ip");
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();

Go — net/http

go
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    proxyURL, _ := url.Parse("http://user:pass@1.2.3.4:8080")
    client := &http.Client{
        Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
    }
    resp, err := client.Get("https://httpbin.org/ip")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}

PHP — cURL

php
<?php
$ch = curl_init("https://httpbin.org/ip");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_PROXY          => "1.2.3.4:8080",
    CURLOPT_PROXYUSERPWD   => "user:pass",
    CURLOPT_PROXYTYPE      => CURLPROXY_HTTP, // или CURLPROXY_SOCKS5_HOSTNAME
    CURLOPT_TIMEOUT        => 10,
]);
echo curl_exec($ch);
curl_close($ch);

cURL из командной строки

bash
# HTTP-прокси
curl -x http://user:pass@1.2.3.4:8080 https://httpbin.org/ip

# SOCKS5 с удалённым DNS
curl --proxy socks5h://user:pass@1.2.3.4:1080 https://httpbin.org/ip

Итоговый чеклист выбора прокси для парсинга

Задача Рекомендация
Лёгкие сайты без защиты Датацентр-прокси, IPv4
Сайты с антиботом (маркетплейсы, поиск) Резидентные, elite, с ротацией
Максимально защищённые / соцсети Мобильные прокси
Нужна сессия (логин, корзина) Статические (sticky) ISP/резидентные
Только сайты с IPv6, экономия IPv6-прокси
Разовый эксперимент / учёба TOR или бесплатные списки (с проверкой)
DNS не должен утекать SOCKS5 со схемой socks5h://

Главные правила:

  1. Берите elite-анонимность — никакой утечки X-Forwarded-For/Via.
  2. Любые публичные/бесплатные прокси обязательно чекайте перед боем.
  3. Под защищённые сайты — резидентные или мобильные, не датацентр.
  4. Прокси закрывают детект по IP, но не по fingerprint — сочетайте с правильными заголовками и адекватной скоростью.
  5. Считайте тарификацию под свою задачу: много лёгких запросов → per-GB/request, большие объёмы → per-IP.