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.
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.
Quatre choses décident si une collecte va au bout ou meurt au premier captcha.
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
Région, pack, durée. Le prix est donné pour une IP autorisée ; chaque IP supplémentaire ajoute 10 %.
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.
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é.
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.
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.
#!/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()
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à.
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.


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.
Crawl en volumeLe meilleur choix
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
Sites protégé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
Données par ville
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
Choisissez un pack, prenez l'heure d'essai gratuite et lancez votre scraper sur le vrai pool.