Entrar Cadastrar
Web scraping

Proxies para web scraping que resistem à onda de bloqueios

Um scraper precisa de muitos endereços, rotação rápida e nenhum medidor de tráfego. Um pacote da Advanced.name dá de 5.000 a 50.000 endereços IPv4 num único link, até 5.000 threads em paralelo e um pool em que cerca de um terço dos endereços muda todo dia.

  • até 50.000 IPs por pacote
  • até 5.000 threads
  • o tráfego não é contado
Racks de servidores com luzes azul-petróleo: o pool de proxies para web scraping
Web scraping

O que um scraper precisa e o que o pacote entrega

Quatro coisas decidem se uma varredura termina ou morre no primeiro captcha.

O que a tarefa exigeO que o pacote entrega

Endereços suficientes para um IP não bater no site duas vezes por minuto

De 5.000 (pacote nº 1) a 50.000 (pacote nº 6) endereços numa só lista

Pool renovado: IPs bloqueados precisam sair antes de você chegar neles

Cerca de um terço do pool roda a cada 24 horas, e a lista se atualiza a cada 10 minutos

Conexões paralelas para a varredura inteira

De 500 a 5.000 threads conforme o pacote, todos os protocolos numa porta só

Ninguém contando gigabytes

Sem limite de tráfego em nenhum pacote ilimitado: você paga o pacote e as threads

Proxies ilimitados

Escolha o pacote pelo tamanho da varredura

Região, pacote, prazo. O preço é por um IP autorizado; cada IP extra soma 10%.

Região
Prazo
IPs autorizados
1 +10% por IP além do primeiro
Recomendado para esta tarefa
$0
  • Proxies no pacote
  • Threads
  • IPs autorizados1
  • ProtocolosHTTP / SOCKS5
Os 13 pacotes na tabela de preços

Três passos do pagamento à primeira página

Pegue o link da lista

Depois do pagamento, o painel mostra um link como get.advanced.name/<ID>. Ele devolve linhas ip:port, uma por endereço. HTTP e SOCKS5 ficam na mesma porta.

Autorize o IP do seu servidor

A lista só abre a partir dos IPs que você cadastrar no painel. Nada de login e senha na configuração do scraper: o endereço é a chave.

Rode a rotação no código

Carregue a lista, percorra em círculo e, quando uma requisição falhar, repita a URL no próximo proxy. O script abaixo faz exatamente isso com a biblioteca padrão.

Scraper pronto: rotação, novas tentativas e filtro por país

Aponte CSV_URL para a exportação do painel, defina COUNTRY e MIN_SPEED e coloque as URLs de destino em urls.txt. O script fica só com o país que você precisa, baixa cada URL pelo próximo proxy e tenta de novo por outro endereço quando um falha. Confira antes o pool no 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, ...
Os valores vêm do formulário; copie ou baixe o arquivo pronto.
Mostrar o código do script
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()
Configuração

Como ligar o pool ao seu scraper

requests e urllib

Passe o proxy em cada requisição: monte um opener com ProxyHandler ou dê ao requests proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}. HTTP e SOCKS dividem a porta, então http:// cobre os dois; para SOCKS5 no requests, instale requests[socks] e use socks5h://ip:port para o DNS ser resolvido do lado do proxy.

Leia a lista uma vez, percorra em círculo e pegue o próximo endereço a cada requisição. Repita uma URL que falhou em outro proxy duas ou três vezes antes de descartar; o script acima já faz isso.

Scrapy, Octoparse e crawlers prontos

No Scrapy, coloque o endereço em request.meta['proxy'] ou use um middleware de rotação de proxies apontado para o arquivo que o gerador grava, e mantenha CONCURRENT_REQUESTS no limite de threads do pacote ou abaixo. Crawlers visuais como Octoparse e ParseHub aceitam a mesma lista ip:port nas configurações de proxy.

Antes de uma varredura longa, filtre o pool uma vez no Socks List Processor, para que endereços mortos não cheguem ao parser. Para um teste rápido do código, a lista de proxies grátis basta.

Na prática

Onde o pool mora

Quatro hábitos que mantêm a varredura viva

  1. Atualize a lista a cada 10 minutos e descarte os endereços que sumiram dela: eles saíram da rotação por algum motivo.
  2. Mantenha um IP num site por algumas requisições e passe para o próximo. Um ciclo por 20.000 endereços dá a cada IP um longo descanso.
  3. Use timeout de 10 a 15 segundos e tente de novo no próximo proxy em vez de esperar.
  4. Combine a região com o site: lojas europeias pela Europa, classificados russos pela CEI, marketplaces chineses pela China.
FAQ

Perguntas sobre esta tarefa

Quantas threads um scraper ganha?
Quantas o pacote permitir: 500 no pacote #1, 5000 no pacote #6. Resi Core e Resi Prime não têm limite de threads. Uma thread é uma conexão aberta com o pool.
Os proxies trocam sozinhos?
A lista troca: cerca de um terço dos endereços muda todo dia. No seu código você escolhe o próximo endereço, então o ritmo fica sob seu controle.
HTTP ou SOCKS5 para scraping?
Tanto faz. Os dois protocolos respondem na mesma porta, então use o que sua biblioteca suporta. Com urllib e curl, HTTP é o caminho mais curto.
Posso testar antes de pagar?
Pode. Uma hora grátis em qualquer pacote, com todas as threads e sem cartão. Dá para rodar uma varredura real e olhar a taxa de erros.
Quando um scraper precisa de Resi em vez de um pacote?
Quando um site bloqueia endereços de listas compartilhadas mais rápido do que você os percorre. O Resi Core dá um IP residencial a cada requisição, e o Resi Prime acrescenta a escolha de cidade. O resto da varredura sai mais barato num pacote, onde o tráfego não é contado.
Planos para esta tarefa

O que escolher para web scraping

Varreduras em volume saem mais baratas num pacote ilimitado. Passe pelos sites que bloqueiam endereços de listas com o Resi Core, e puxe dados por cidade com o Resi Prime.

Proxies ilimitados

Varredura em volumeMelhor escolha

Pacote #3 · World MIX · 20.000 IP · 2000 threads

O tráfego não é contado: gigabytes de HTML e imagens não mudam o preço. Um terço dos endereços muda por dia, e os bloqueados saem da lista.

$700 por mêsou $2.70 por hora

Resi Core

Sites protegidos

2M+ IPs · mais de 200 países · sem limite de threads

Um IP residencial novo a cada requisição. Use para sites onde os endereços de pacote caem em captcha. O país você define na string de conexão.

a partir de $0.49 por GB1 GB por $0.85

Resi Prime

Dados por cidade

30M+ IPs · 220 países · sem limite de threads

Cidade, região, provedor e ASN na string de conexão. Você precisa disso quando um site entrega dados diferentes para cidades diferentes.

a partir de $1.39 por GB1 GB por $2.29

Comece a varredura em menos de uma hora

Escolha um pacote, use a hora de teste grátis e rode seu scraper no pool real.

Preços Testar uma hora grátis