Увійти Реєстрація
Веб-скрапінг

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

Парсеру потрібно багато адрес, швидка ротація і жодного лічильника трафіку. Один пакет Advanced.name дає від 5000 до 50 000 IPv4-адрес за одним посиланням, до 5000 паралельних потоків і пул, де щодня змінюється приблизно третина адрес.

  • до 50 000 IP у пакеті
  • до 5000 потоків
  • трафік не рахується
Серверні стійки з бірюзовими індикаторами: пул проксі для веб-скрапінгу
Веб-скрапінг

Що потрібно парсеру і що дає пакет

Чотири речі вирішують, чи дійде обхід до кінця, чи помре на першій капчі.

Що потрібно задачіЩо дає пакет

Стільки адрес, щоб один IP не стукав на сайт двічі на хвилину

Від 5000 (пакет №1) до 50 000 (пакет №6) адрес в одному списку

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

Приблизно третина пулу змінюється щодоби, список оновлюється кожні 10 хвилин

Паралельні з'єднання на весь обхід

Від 500 до 5000 потоків залежно від пакета, усі протоколи на одному порту

Ніхто не рахує гігабайти

Ліміту трафіку немає в жодному безлімітному пакеті: ви платите за пакет і потоки

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

Виберіть пакет під обсяг обходу

Регіон, пакет, термін. Ціна вказана за один авторизований IP, кожен додатковий IP додає 10%.

Регіон
Строк
Авторизовані IP
1 +10% за кожну IP після першої
Рекомендуємо для цієї задачі
$0
  • Проксі в пакеті
  • Потоки
  • Авторизовані IP1
  • ПротоколиHTTP / SOCKS5
Усі 13 пакетів у таблиці цін

Три кроки від оплати до першої сторінки

Отримайте посилання на список

Після оплати в кабінеті з'являється посилання виду get.advanced.name/<ID>. Воно віддає рядки ip:port, по одному на адресу. HTTP і SOCKS5 працюють на одному порту.

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

Список відкривається лише з IP, які ви додали в кабінеті. Ніяких логінів і паролів у конфігу парсера: ключем є адреса.

Ротація в коді

Завантажте список, ідіть по ньому по колу, а якщо запит упав, повторіть URL через наступний проксі. Скрипт нижче робить саме це на стандартній бібліотеці.

Готовий парсер: ротація, повтори, фільтр за країною

Вкажіть у CSV_URL посилання на вивантаження з кабінету, задайте 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, 5000 на пакеті №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

Запустіть обхід протягом години

Виберіть пакет, візьміть безкоштовну тестову годину і запустіть парсер на справжньому пулі.

Тарифи Взяти годину безкоштовно