Возьмите ссылку на список
После оплаты в кабинете появляется ссылка вида get.advanced.name/<ID>. Она отдаёт строки ip:port, по адресу на строку. HTTP и SOCKS5 сидят на одном порту.
Парсеру нужны тысячи адресов, быстрая ротация и никакого счётчика трафика. Один пакет Advanced.name даёт от 5 000 до 50 000 адресов IPv4 по одной ссылке, до 5 000 параллельных потоков и пул, в котором за сутки меняется около трети адресов.
Четыре вещи решают, дойдёт ли обход до конца или умрёт на первой капче.
Столько адресов, чтобы один IP не заходил на сайт дважды в минуту
От 5 000 (пакет №1) до 50 000 (пакет №6) адресов в одном списке
Свежий пул: забаненные IP должны уйти раньше, чем вы до них дойдёте
Около трети пула меняется за 24 часа, список обновляется каждые 10 минут
Параллельные соединения на весь обход
От 500 до 5 000 потоков в зависимости от пакета, все протоколы на одном порту
Никто не считает гигабайты
Лимита трафика нет ни на одном безлимитном пакете: платите за пакет и потоки
Регион, пакет, срок. Цена за один авторизованный IP, каждый дополнительный IP добавляет 10%.
После оплаты в кабинете появляется ссылка вида get.advanced.name/<ID>. Она отдаёт строки ip:port, по адресу на строку. HTTP и SOCKS5 сидят на одном порту.
Список открывается только с адресов, которые вы добавили в кабинете. Логина и пароля в конфиге парсера нет: ключом служит сам адрес.
Загрузите список, идите по нему по кругу, при ошибке повторяйте URL через следующий прокси. Скрипт ниже делает ровно это на стандартной библиотеке.
Укажите в CSV_URL ссылку на CSV-выгрузку из кабинета, задайте COUNTRY и MIN_SPEED, положите целевые URL в urls.txt. Скрипт оставляет только нужную страну, тянет каждый URL через следующий прокси и повторяет через другой адрес при ошибке. Пул сначала прогоните через Socks List Processor.
#!/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()
Прокси передаётся на каждый запрос: соберите 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 кладите адрес в request.meta['proxy'] или подключите middleware ротации, указав файл из сборщика, и держите CONCURRENT_REQUESTS не выше лимита потоков пакета. Программы с интерфейсом — Octoparse, ParseHub — берут тот же список ip:port в настройках прокси.
Перед долгим обходом прогоните пул через Socks List Processor, чтобы мёртвые адреса не доходили до парсера. Для быстрой пробы хватит бесплатного списка.


Обход в объёме дешевле на безлимитном пакете. Сайты, которые банят адреса из списков, проходите на Resi Core, данные по городам снимайте с Resi Prime.
Обход в объёмеЛучший выбор
Трафик не считается: гигабайты HTML и картинок не меняют цену. Треть адресов обновляется за сутки, забаненные уходят из списка.
$700 в месяцили $2.70 в час
Защищённые сайты
Новый домашний IP на каждый запрос. Берите для сайтов, где адреса пакета ловят капчу. Страну задаёте в строке подключения.
от $0.49 за ГБ1 ГБ за $0.85
Данные по городам
Город, регион, провайдер и ASN в строке подключения. Нужен, когда сайт отдаёт разным городам разные данные.
от $1.39 за ГБ1 ГБ за $2.29
Выберите пакет, возьмите бесплатный час теста, прогоните парсер на настоящем пуле.