Ротация на уровне списка
ProxySale меняет прокси через сам список. Пул весь день теряет мёртвые адреса и получает новые, и каждый раз, когда софт запрашивает ссылку, он получает набор, который работает в этот момент. Правила ротации у нас настраивать не нужно: перезагружайте ссылку раз в 8–10 минут, и список остаётся свежим.
Строку для каждого запроса выбирает ваш софт. Большинство парсеров и SEO-программ берут случайный прокси на каждый запрос или переключаются после ошибки, и нагрузка расходится по тысячам адресов.
Чем ротационные прокси помогают парсингу
Поисковики, маркетплейсы и агрегаторы цен считают запросы с каждого IP. Адрес, который шлёт сотни запросов в минуту, получает капчу или блокировку. Если разложить ту же нагрузку по списку ротационных прокси, каждый адрес отправит лишь несколько запросов, и сайт увидит картину, похожую на обычных посетителей.
Ротация прячет и мёртвые строки. Неудачный запрос софт повторяет через другой адрес, а следующая перезагрузка списка убирает плохую строку.
Как настроить ротацию в софте
- A-Parser и ZennoPoster: добавьте ссылку на список как источник прокси с перезагрузкой раз в 10 минут.
- Scrapy: загрузите список в downloader middleware, которая берёт случайную строку на каждый запрос.
- Python requests: держите список в памяти и передавайте случайную строку в словаре proxies.
- curl в bash: перед каждым вызовом берите строку через
shuf -n 1.
Оставляйте перезагрузку раз в 8–10 минут. Запросы каждую минуту мы притормаживаем, да и пул так быстро не меняется.
Стратегии ротации
- Случайная строка на каждый запрос: самая простая схема и самое ровное распределение нагрузки.
- Одна строка на короткую серию: полезно, когда сайт ждёт несколько связанных запросов, например страницу поиска и следующую страницу выдачи.
- Смена при ошибке: строка работает, пока отвечает, и уходит после капчи, таймаута или ответа 403.
- Пауза для строки: после блокировки уберите адрес из ротации на 10–15 минут.
Большинство парсеров сочетают первую и третью схемы: случайная строка на запрос и немедленная смена после ошибки. Следите за долей капч и неудачных запросов. Если она растёт, добавьте адресов или снизьте скорость.
Сколько адресов нужно
Посчитайте запросы в минуту к самому строгому сайту и разделите на то, сколько спокойно выдерживает один адрес. Если сайт терпит пять запросов в минуту с одного IP, а вам нужно 5 000, рассчитывайте минимум на 1 000 живых адресов и добавьте запас на ночной спад. Большие задачи разобраны на странице прокси оптом.
Пул выбирайте по сайту: «Микс мира» для сайтов со всего мира, прокси Европы для европейских магазинов и выдачи, прокси СНГ для Яндекса и региональных маркетплейсов, прокси Китая для Baidu.
Задачи, где нужен постоянный адрес
Некоторым задачам нужен один адрес надолго: вход в аккаунты, корзина в магазине, профили антидетект-браузера. Ротационный список пакета для них неудобен: адрес в любой момент может покинуть пул. Для такой работы есть резидентные прокси пула Макс: у каждой строки своя сессия: срок вы ставите от трёх минут до суток, а держится она, пока домашнее устройство онлайн. Как настроить профили, рассказано на странице прокси для антидетекта.
Для всего, что читает открытые страницы, ротация подходит лучше и обходится дешевле в пересчёте на запрос.
Файл со списком, который обновляется раз в 10 минут
Некоторые программы читают прокси только из файла. Держите этот файл свежим небольшим скриптом, который скачивает список раз в 10 минут. Каждый скрипт ниже сначала пишет во временный файл и заменяет основной только после полной загрузки, поэтому софт никогда не прочитает недописанный или пустой список. Вместо YOUR_LIST_LINK вставьте ссылку на список из панели управления.
Linux: shell-скрипт и cron
Сохраните скрипт как /opt/proxies/update-proxies.sh, сделайте его исполняемым командой chmod +x /opt/proxies/update-proxies.sh и запустите один раз вручную. Он напишет, сколько прокси сохранил, или выведет ошибку, если ссылка не отвечает.
#!/bin/sh
LIST_URL="YOUR_LIST_LINK"
DEST="/opt/proxies/proxies.txt"
TMP="$DEST.tmp"
mkdir -p "$(dirname "$DEST")"
if curl -fsS --max-time 60 -o "$TMP" "$LIST_URL" && [ -s "$TMP" ]; then
mv "$TMP" "$DEST"
echo "$(date '+%F %T') saved $(wc -l < "$DEST") proxies"
else
rm -f "$TMP"
echo "$(date '+%F %T') download failed, kept the old list" >&2
exit 1
fiОткройте расписание командой crontab -e и добавьте строку ниже. Cron будет запускать скрипт раз в 10 минут и дописывать его сообщения в лог. Запускайте от root или поменяйте оба пути на папку в домашнем каталоге.
*/10 * * * * /opt/proxies/update-proxies.sh >> /var/log/update-proxies.log 2>&1Windows: PowerShell и планировщик заданий
Сохраните скрипт как C:\proxies\update-proxies.ps1 и один раз запустите его в PowerShell, чтобы проверить ссылку.
$ListUrl = "YOUR_LIST_LINK"
$Dest = "C:\proxies\proxies.txt"
$Tmp = "$Dest.tmp"
New-Item -ItemType Directory -Force -Path (Split-Path $Dest) | Out-Null
try {
Invoke-WebRequest -Uri $ListUrl -OutFile $Tmp -UseBasicParsing -TimeoutSec 60
if ((Get-Item $Tmp).Length -eq 0) { throw "empty list" }
Move-Item -Force $Tmp $Dest
$count = (Get-Content $Dest | Measure-Object -Line).Lines
Write-Output "$(Get-Date -Format s) saved $count proxies"
} catch {
Remove-Item $Tmp -ErrorAction SilentlyContinue
Write-Output "$(Get-Date -Format s) download failed, kept the old list: $($_.Exception.Message)"
exit 1
}Создайте задание, которое запускает скрипт раз в 10 минут: вставьте команду в командную строку или PowerShell. Задание переживает перезагрузку и появится в планировщике под именем UpdateProxies. Оно работает, пока вы вошли в систему. Чтобы оно работало без входа, откройте командную строку от имени администратора и добавьте к команде /RU SYSTEM.
schtasks /Create /TN "UpdateProxies" /SC MINUTE /MO 10 /F /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\proxies\update-proxies.ps1"Удобнее мышкой? Откройте «Планировщик заданий», выберите «Создать простую задачу», укажите ежедневный триггер, затем в свойствах задачи включите «Повторять задачу каждые 10 минут» в течение «Бесконечно». Действие запускает powershell.exe с аргументами -NoProfile -ExecutionPolicy Bypass -File C:\proxies\update-proxies.ps1.
Любая система: Python
Версия на Python работает в цикле, и планировщик ей не нужен. Запустите её в терминале, внутри screen или tmux или как службу. Нужен Python 3, дополнительные пакеты не требуются.
import time
import urllib.request
from pathlib import Path
LIST_URL = "YOUR_LIST_LINK"
DEST = Path("proxies.txt")
EVERY = 600
while True:
try:
data = urllib.request.urlopen(LIST_URL, timeout=60).read()
if not data.strip():
raise ValueError("empty list")
tmp = DEST.with_name(DEST.name + ".tmp")
tmp.write_bytes(data)
tmp.replace(DEST)
print(time.strftime("%Y-%m-%dT%H:%M:%S"), "saved", len(data.split()), "proxies", flush=True)
except Exception as error:
print(time.strftime("%Y-%m-%dT%H:%M:%S"), "download failed, kept the old list:", error, flush=True)
time.sleep(EVERY)Укажите программе путь к сохранённому файлу, и она всегда будет читать список не старше 10 минут. Интервал оставьте 10 минут: более частые запросы мы притормаживаем.
Протоколы, цены и тест
Порт каждой строки безлимитного пакета принимает HTTP, HTTPS, SOCKS4 и SOCKS5, смотрите SOCKS5 прокси и HTTP прокси. Размеры и сроки собраны в прайсе, а бесплатный час любого пакета даёт поддержка на странице контактов.
