Connexion Inscription
Web scraping

Des proxys pour le web scraping qui résistent aux blocages

Un scraper a besoin de beaucoup d'adresses, d'une rotation rapide et d'aucun compteur de trafic. Un pack Advanced.name vous donne de 5 000 à 50 000 adresses IPv4 sur un seul lien, jusqu'à 5 000 threads en parallèle et un pool dont environ un tiers des adresses change chaque jour.

  • jusqu'à 50 000 IP par pack
  • jusqu'à 5 000 threads
  • trafic non décompté
Baies de serveurs aux voyants bleu canard : le pool de proxies pour le web scraping
Web scraping

Ce qu'il faut à un scraper et ce que donne le pack

Quatre choses décident si une collecte va au bout ou meurt au premier captcha.

Ce que demande la tâcheCe que fournit le pack

Assez d'adresses pour qu'une IP ne frappe pas le site deux fois par minute

De 5 000 (pack n° 1) à 50 000 (pack n° 6) adresses dans une seule liste

Un pool frais : les IP bannies doivent partir avant que vous y arriviez

Environ un tiers du pool tourne toutes les 24 heures, la liste est rafraîchie toutes les 10 minutes

Des connexions parallèles pour toute la collecte

De 500 à 5 000 threads selon le pack, tous les protocoles sur un seul port

Personne ne compte les gigaoctets

Aucune limite de trafic sur les packs illimités : vous payez le pack et les threads

Proxys illimités

Choisissez le pack selon la taille de la collecte

Région, pack, durée. Le prix est donné pour une IP autorisée ; chaque IP supplémentaire ajoute 10 %.

Région
Durée
IP autorisées
1 +10 % par IP au-delà de la première
Recommandé pour cette tâche
$0
  • Proxys dans le pack
  • Threads
  • IP autorisées1
  • ProtocolesHTTP / SOCKS5
Les 13 packs dans la grille tarifaire

Trois étapes du paiement à la première page

Récupérez le lien de la liste

Après le paiement, l'espace client affiche un lien du type get.advanced.name/<ID>. Il renvoie des lignes ip:port, une par adresse. HTTP et SOCKS5 partagent le même port.

Autorisez l'IP de votre serveur

La liste ne s'ouvre que depuis les IP ajoutées dans l'espace client. Pas d'identifiant ni de mot de passe dans la config du scraper : l'adresse sert de clé.

Faites tourner dans le code

Chargez la liste, parcourez-la en boucle et, si une requête échoue, relancez l'URL sur le proxy suivant. Le script ci-dessous fait exactement ça avec la bibliothèque standard.

Scraper prêt : rotation, relances, filtre par pays

Faites pointer CSV_URL vers l'export de votre espace client, réglez COUNTRY et MIN_SPEED, placez les URL cibles dans urls.txt. Le script ne garde que le pays voulu, récupère chaque URL via le proxy suivant et relance sur une autre adresse en cas d'échec. Vérifiez d'abord le pool avec le 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, ...
Les valeurs viennent du formulaire ; copiez ou téléchargez le fichier prêt.
Afficher le code du 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()
Configuration

Brancher le pool sur votre scraper

requests et urllib

Passez le proxy à chaque requête : construisez un opener avec ProxyHandler, ou donnez à requests proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}. HTTP et SOCKS partagent un port, donc http:// couvre les deux ; pour SOCKS5 dans requests, installez requests[socks] et utilisez socks5h://ip:port afin que le DNS soit résolu côté proxy.

Lisez la liste une fois, parcourez-la en boucle et prenez l'adresse suivante à chaque requête. Relancez une URL en échec via un autre proxy deux ou trois fois avant de l'abandonner ; le script ci-dessus le fait déjà.

Scrapy, Octoparse et crawlers tout faits

Dans Scrapy, placez l'adresse dans request.meta['proxy'] ou utilisez un middleware de rotation de proxies pointé vers le fichier que génère le script, et gardez CONCURRENT_REQUESTS au niveau de la limite de threads de votre pack ou en dessous. Les crawlers visuels comme Octoparse et ParseHub acceptent la même liste ip:port dans leurs réglages de proxy.

Avant une longue collecte, filtrez le pool une fois avec le Socks List Processor pour qu'aucune adresse morte n'atteigne le parseur. Pour un essai rapide du code, la liste de proxies gratuits suffit.

En pratique

Où vit le pool

Quatre habitudes qui gardent une collecte en vie

  1. Rafraîchissez la liste toutes les 10 minutes et retirez les adresses qui en ont disparu : elles sont sorties de la rotation pour une raison.
  2. Gardez une IP sur un site pendant quelques requêtes, puis passez à la suivante. Un cycle sur 20 000 adresses laisse à chaque IP un long repos.
  3. Fixez un timeout de 10 à 15 secondes et relancez sur le proxy suivant au lieu d'attendre.
  4. Accordez la région au site : boutiques européennes via l'Europe, petites annonces russes via la CEI, marketplaces chinoises via la Chine.
FAQ

Questions sur cette tâche

Combien de threads pour un scraper ?
Autant que le pack le permet : 500 sur le pack #1, 5000 sur le pack #6. Resi Core et Resi Prime n'ont pas de limite de threads. Un thread correspond à une connexion ouverte vers le pool.
Les proxies tournent-ils tout seuls ?
C'est la liste qui tourne : environ un tiers des adresses change chaque jour. Dans votre code, c'est vous qui choisissez l'adresse suivante, vous gardez donc la main sur le rythme.
HTTP ou SOCKS5 pour le scraping ?
Les deux conviennent. Les deux protocoles répondent sur le même port, prenez celui que gère votre bibliothèque. Avec urllib et curl, HTTP est le chemin le plus court.
Puis-je tester avant de payer ?
Oui. Une heure gratuite sur n'importe quel pack, avec tous les threads et sans carte. De quoi lancer une vraie collecte et regarder le taux d'erreurs.
Quand un scraper a-t-il besoin de Resi plutôt que d'un pack ?
Quand un site bannit les adresses des listes partagées plus vite que vous ne les parcourez. Resi Core donne une IP résidentielle à chaque requête, et Resi Prime ajoute le choix de la ville. Le reste du crawl coûte moins cher sur un pack, où le trafic n'est pas compté.
Offres pour cette tâche

Que prendre pour le web scraping

Le crawl en volume coûte moins cher sur un pack illimité. Passez les sites qui bannissent les adresses des listes avec Resi Core, et collectez les données par ville avec Resi Prime.

Proxys illimités

Crawl en volumeLe meilleur choix

Pack #3 · World MIX · 20 000 IP · 2000 threads

Le trafic n'est pas compté : des gigaoctets de HTML et d'images ne changent pas le prix. Un tiers des adresses change chaque jour, et les bannies sortent de la liste.

$700 par moisou $2.70 de l'heure

Resi Core

Sites protégés

2M+ IP · 200+ pays · threads illimités

Une nouvelle IP résidentielle à chaque requête. Prenez-la pour les sites où les adresses des packs tombent sur un captcha. Vous fixez le pays dans la chaîne de connexion.

dès $0.49 le Go1 Go pour $0.85

Resi Prime

Données par ville

30M+ IP · 220 pays · threads illimités

Ville, région, FAI et ASN dans la chaîne de connexion. Utile quand un site sert des données différentes selon la ville.

dès $1.39 le Go1 Go pour $2.29

Lancez la collecte en moins d'une heure

Choisissez un pack, prenez l'heure d'essai gratuite et lancez votre scraper sur le vrai pool.

Tarifs Prendre une heure offerte