Вход Регистрация
Парсинг

Прокси для парсинга, которые переживают волну банов

Парсеру нужны тысячи адресов, быстрая ротация и никакого счётчика трафика. Один пакет Advanced.name даёт от 5 000 до 50 000 адресов IPv4 по одной ссылке, до 5 000 параллельных потоков и пул, в котором за сутки меняется около трети адресов.

  • до 50 000 IP в пакете
  • до 5 000 потоков
  • трафик не считается
Серверные стойки с бирюзовыми индикаторами: пул прокси для парсинга
Парсинг

Что нужно парсеру и что даёт пакет

Четыре вещи решают, дойдёт ли обход до конца или умрёт на первой капче.

Что нужно задачеЧто даёт пакет

Столько адресов, чтобы один IP не заходил на сайт дважды в минуту

От 5 000 (пакет №1) до 50 000 (пакет №6) адресов в одном списке

Свежий пул: забаненные IP должны уйти раньше, чем вы до них дойдёте

Около трети пула меняется за 24 часа, список обновляется каждые 10 минут

Параллельные соединения на весь обход

От 500 до 5 000 потоков в зависимости от пакета, все протоколы на одном порту

Никто не считает гигабайты

Лимита трафика нет ни на одном безлимитном пакете: платите за пакет и потоки

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

Подберите пакет под объём обхода

Регион, пакет, срок. Цена за один авторизованный IP, каждый дополнительный IP добавляет 10%.

Регион
Срок
Авторизованных IP
1 +10% к тарифу за каждый IP свыше первого
Рекомендуем под эту задачу
$0
  • Прокси в пакете
  • Потоков
  • IP авторизации1
  • ПротоколыHTTP / SOCKS5
Все 13 пакетов в таблице тарифов

Три шага от оплаты до первой страницы

Возьмите ссылку на список

После оплаты в кабинете появляется ссылка вида get.advanced.name/<ID>. Она отдаёт строки ip:port, по адресу на строку. HTTP и SOCKS5 сидят на одном порту.

Авторизуйте IP сервера

Список открывается только с адресов, которые вы добавили в кабинете. Логина и пароля в конфиге парсера нет: ключом служит сам адрес.

Крутите список в коде

Загрузите список, идите по нему по кругу, при ошибке повторяйте URL через следующий прокси. Скрипт ниже делает ровно это на стандартной библиотеке.

Готовый парсер: ротация, повтор, отбор по стране

Укажите в CSV_URL ссылку на CSV-выгрузку из кабинета, задайте COUNTRY и MIN_SPEED, положите целевые URL в urls.txt. Скрипт оставляет только нужную страну, тянет каждый URL через следующий прокси и повторяет через другой адрес при ошибке. Пул сначала прогоните через Socks List Processor.

CSV export link from your dashboard
ISO 3166-1 alpha-2 (e.g. DE, NL, US), or "" for the whole pool
keep proxies with speed >= this value (higher is better)
parallel requests
seconds per request
proxies to try before a URL is marked failed
one target URL per line
fetched HTML is written here as 1.html, 2.html, ...
Значения берутся из формы: скопируйте или скачайте готовый файл.
Показать код скрипта
Python 3.8+ · parsing.py
#!/usr/bin/env python3
"""Multithreaded scraper for Advanced.name proxies.

Reads the CSV proxy export, keeps the country and speed you need, then fetches a
list of target URLs through rotating proxies with automatic retries. Standard
library only, no pip. Edit the CONFIG block and run: python3 scrape.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # ISO 3166-1 alpha-2 (e.g. DE, NL, US), or "" for the whole pool
MIN_SPEED = 3           # keep proxies with speed >= this value (higher is better)
THREADS = 50            # parallel requests
TIMEOUT = 15            # seconds per request
RETRIES = 3             # proxies to try before a URL is marked failed
URLS_FILE = "urls.txt"  # one target URL per line
OUT_DIR = "pages"       # fetched HTML is written here as 1.html, 2.html, ...
# ============================================================================

import csv
import io
import itertools
import os
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed

# CSV columns from the dashboard export, ';' separated:
# ip ; port ; country ; speed ; uptime ; exit_ip
COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED, COL_UPTIME = 0, 1, 2, 3, 4
UA = "Mozilla/5.0 (compatible; scraper/1.0)"


def load_proxies():
    """Download the CSV list, keep the wanted country and speed, fastest first."""
    raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
    pool = []
    for row in csv.reader(io.StringIO(raw), delimiter=";"):
        if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
            continue
        country = row[COL_COUNTRY].strip().upper()
        speed = int(row[COL_SPEED] or 0)
        if COUNTRY and country != COUNTRY.upper():
            continue
        if speed < MIN_SPEED:
            continue
        pool.append((row[COL_IP].strip() + ":" + row[COL_PORT].strip(), speed))
    pool.sort(key=lambda item: -item[1])
    return [addr for addr, _ in pool]


def opener_for(proxy):
    handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
    return urllib.request.build_opener(handler)


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies match COUNTRY=%r and MIN_SPEED=%d." % (COUNTRY, MIN_SPEED))
    with open(URLS_FILE, encoding="utf-8") as fh:
        urls = [u for u in map(str.strip, fh) if u and not u.startswith("#")]
    os.makedirs(OUT_DIR, exist_ok=True)
    print("proxies: %d (%s), urls: %d, threads: %d" % (len(proxies), COUNTRY or "any", len(urls), THREADS))

    rotation = itertools.cycle(proxies)
    lock = threading.Lock()
    done = {"ok": 0, "fail": 0}

    def fetch(index, url):
        for _ in range(RETRIES):
            with lock:
                proxy = next(rotation)
            req = urllib.request.Request(url, headers={"User-Agent": UA})
            try:
                body = opener_for(proxy).open(req, timeout=TIMEOUT).read()
            except Exception:
                continue
            with open(os.path.join(OUT_DIR, "%d.html" % index), "wb") as out:
                out.write(body)
            return True
        return False

    with ThreadPoolExecutor(max_workers=THREADS) as pool:
        futures = {pool.submit(fetch, i, u): u for i, u in enumerate(urls, 1)}
        for fut in as_completed(futures):
            ok = fut.result()
            with lock:
                done["ok" if ok else "fail"] += 1
                total = done["ok"] + done["fail"]
            sys.stderr.write("\r%d/%d  ok %d  fail %d" % (total, len(urls), done["ok"], done["fail"]))
            sys.stderr.flush()
    print("\nsaved %d pages to %s/ (%d failed)" % (done["ok"], OUT_DIR, done["fail"]))


if __name__ == "__main__":
    main()
Настройка

Как подключить пул к парсеру

requests и urllib

Прокси передаётся на каждый запрос: соберите opener с ProxyHandler или дайте requests proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}. HTTP и SOCKS на одном порту, поэтому http:// покрывает оба; для SOCKS5 в requests поставьте requests[socks] и берите socks5h://ip:port, чтобы DNS резолвился на стороне прокси.

Прочитайте список один раз, идите по кругу и берите следующий адрес на каждый запрос. Упавший URL повторяйте через другой прокси два-три раза, прежде чем выбросить; скрипт выше делает ровно это.

Scrapy, Octoparse и готовые краулеры

В Scrapy кладите адрес в request.meta['proxy'] или подключите middleware ротации, указав файл из сборщика, и держите CONCURRENT_REQUESTS не выше лимита потоков пакета. Программы с интерфейсом — Octoparse, ParseHub — берут тот же список ip:port в настройках прокси.

Перед долгим обходом прогоните пул через Socks List Processor, чтобы мёртвые адреса не доходили до парсера. Для быстрой пробы хватит бесплатного списка.

На практике

Где живёт пул

Четыре привычки, с которыми обход не падает

  1. Обновляйте список каждые 10 минут и выкидывайте адреса, которых в нём больше нет: их вывели из ротации не просто так.
  2. Держите один IP на одном сайте несколько запросов, потом переходите дальше. Круг по 20 000 адресов даёт каждому IP долгую паузу.
  3. Ставьте таймаут 10–15 секунд и повторяйте через следующий прокси вместо ожидания.
  4. Подбирайте регион под сайт: европейские магазины через Европу, российские классифайды через СНГ, китайские площадки через Китай.

Эта задача по странам

Показать все страны
FAQ

Вопросы по этой задаче

Сколько потоков получит парсер?
Столько, сколько разрешает пакет: 500 на пакете №1, 5 000 на пакете №6. На Resi Core и Resi Prime потоки не ограничены. Один поток равен одному открытому соединению к пулу.
Прокси ротируются сами?
Ротируется список: за сутки меняется около трети адресов. Внутри кода следующий адрес выбираете вы сами, так вы управляете темпом.
HTTP или SOCKS5 для парсинга?
Любой. Оба протокола отвечают на одном порту, берите тот, что поддерживает библиотека. Для urllib и curl короче путь через HTTP.
Можно проверить до оплаты?
Да. Час бесплатно на любом пакете с полными потоками, без карты. Хватает, чтобы прогнать реальный обход и посмотреть долю ошибок.
Когда парсеру нужен Resi вместо пакета?
Когда сайт банит адреса из общих списков быстрее, чем вы их проходите. Resi Core даёт домашний IP на каждый запрос, Resi Prime добавляет выбор города. Остальной обход дешевле на пакете: трафик на нём не считается.
Тарифы под задачу

Что взять под парсинг

Обход в объёме дешевле на безлимитном пакете. Сайты, которые банят адреса из списков, проходите на Resi Core, данные по городам снимайте с Resi Prime.

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

Обход в объёмеЛучший выбор

Пакет №3 · Микс Мира · 20 000 IP · 2 000 потоков

Трафик не считается: гигабайты HTML и картинок не меняют цену. Треть адресов обновляется за сутки, забаненные уходят из списка.

$700 в месяцили $2.70 в час

Resi Core

Защищённые сайты

2 млн+ IP · 200+ стран · потоки без лимита

Новый домашний IP на каждый запрос. Берите для сайтов, где адреса пакета ловят капчу. Страну задаёте в строке подключения.

от $0.49 за ГБ1 ГБ за $0.85

Resi Prime

Данные по городам

30 млн+ IP · 220 стран · потоки без лимита

Город, регион, провайдер и ASN в строке подключения. Нужен, когда сайт отдаёт разным городам разные данные.

от $1.39 за ГБ1 ГБ за $2.29

Запустите обход в течение часа

Выберите пакет, возьмите бесплатный час теста, прогоните парсер на настоящем пуле.

Цены Забрать час теста