Skip to content
Статья / 2 мин. чтения

ProxyScrape Python и веб: как получать, проверять и ротировать прокси

ProxyScrape предлагает загружаемые списки прокси и API, но бесплатные списки — это не продакшн-инфраструктура. Вот безопасный рабочий процесс на Python для получения, проверки и ротации прокси, а также что стоит проверять в веб-панели.

ProxyScrape часто ищут вместе с Python, потому что пользователи хотят получать список прокси, тестировать его и ротировать в скрипте. Веб-панель и API пересекаются, но служат разным целям. Это руководство посвящено безопасному рабочему процессу: получить, проверить, ротировать и понимать, когда бесплатные прокси — неподходящий инструмент.

Что вы получаете от ProxyScrape: веб-списки, API и платные пулы

ProxyScrape предоставляет загрузку списков прокси и доступ к API, а также коммерческие прокси-услуги. Точные эндпоинты, протоколы, форматы, лимиты и доступные локации могут меняться, поэтому всегда уточняйте их в своей панели ProxyScrape или в актуальной документации. Не прописывайте жёстко в коде эндпоинт, найденный в старом руководстве, не проверив его.

Бесплатные списки прокси лучше всего подходят для обучения и тестирования. Они обычно непригодны для продакшн-скрапинга, входов в аккаунты или любых чувствительных данных, потому что аптайм, скорость и надёжность сильно различаются.

Получение списка прокси в Python

Начните с сохранения URL API в переменной окружения, а не с добавления его в код.

import os
import requests

API_URL = os.environ['PROXYSCRAPE_API_URL']  # copy from your ProxyScrape dashboard/docs

response = requests.get(API_URL, timeout=15)
response.raise_for_status()

lines = [line.strip() for line in response.text.splitlines() if line.strip()]
print(f'Fetched {len(lines)} proxies')
print(lines[:5])

Если API возвращает JSON, проверьте структуру ответа, прежде чем выбирать поля. Имена полей могут меняться.

data = response.json()
# Adjust this to match the current API response
proxies = [item['proxy'] for item in data.get('proxies', [])]

Проверка прокси, прежде чем они начнут тратить ваше время

Список прокси бесполезен, пока вы его не протестируете. Проверяйте через безобидный эндпоинт, возвращающий IP, и записывайте, какие прокси работают.

import concurrent.futures
import requests

TEST_URL = 'https://api.ipify.org?format=json'

def check(proxy):
    # Use http:// for HTTP proxies.
    # For SOCKS5, install requests[socks] and use socks5h://host:port.
    proxy_url = f'http://{proxy}'
    proxies = {'http': proxy_url, 'https': proxy_url}
    try:
        response = requests.get(TEST_URL, proxies=proxies, timeout=8)
        response.raise_for_status()
        return proxy, response.json()
    except Exception:
        return proxy, None

working = []
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as pool:
    for proxy, result in pool.map(check, lines[:200]):
        if result:
            working.append(proxy)
            print('OK', proxy, result)

print(f'Working: {len(working)}')

Для прокси SOCKS5 используйте socks5h://host:port, когда нужен удалённый DNS. Для прокси с аутентификацией формат обычно http://user:pass@host:port или socks5h://user:pass@host:port, но уточните формат у провайдера.

Ротация прокси в скрипте Python

Когда у вас есть пул работающих прокси, ротируйте их по предсказуемой стратегии. Ротация на каждый запрос проста, но она может разрывать сессии и вызывать проверки входа.

import itertools
import requests
from requests.adapters import HTTPAdapter

working_proxies = working  # from the validator above
proxy_cycle = itertools.cycle(working_proxies)

session = requests.Session()
session.mount('https://', HTTPAdapter(max_retries=2))

urls = [
    'https://example.com/page/1',
    'https://example.com/page/2',
    'https://example.com/page/3',
]

for url in urls:
    proxy = next(proxy_cycle)
    proxies = {
        'http': f'http://{proxy}',
        'https': f'http://{proxy}',
    }
    try:
        response = session.get(url, proxies=proxies, timeout=12)
        print(response.status_code, proxy, url)
    except requests.RequestException as exc:
        print('FAILED', proxy, exc)

Если целевому сайту нужна стабильная сессия, используйте липкие сессии (sticky sessions) вместо ротации на каждый запрос. Многие провайдеры реализуют это через ID сессии в имени пользователя. Проверьте документацию провайдера для точного формата; не угадывайте.

Использование веб-панели ProxyScrape

Веб-часть полезна для быстрых проверок:

  • Скачайте список в нужном вам формате.
  • Фильтруйте по протоколу, например HTTP или SOCKS5, если доступно.
  • Фильтруйте по стране или уровню анонимности, если доступно.
  • Скопируйте эндпоинт API для автоматизации.
  • Проверьте, является ли список бесплатным или привязанным к платному плану.
  • Убедитесь, что целевой сайт разрешает тип доступа, который вы планируете.

Если скачанный список устаревает за считанные минуты, это нормально для бесплатных прокси. Относитесь к нему как к расходному материалу.

Этика, безопасность и юридические проверки

  • Уважайте условия целевого сайта, robots.txt и лимиты запросов.
  • Не передавайте учётные данные, персональные данные или платёжные данные через недоверенные бесплатные прокси.
  • Используйте TLS и проверяйте сертификаты.
  • Если вы обрабатываете персональные данные, проверьте GDPR, CCPA и другие применимые правила.
  • Используйте платные резидентные или дата-центровые прокси, когда вам нужна надёжность и поддержка.

Главное

ProxyScrape можно использовать как из веб-панели, так и из Python, но рабочий процесс важнее источника. Получите актуальный список, проверьте его, ротируйте осознанно и оставьте бесплатные прокси там, где им место: в тестировании и обучении.