Link zur Liste holen
Nach der Zahlung zeigt der Kundenbereich einen Link wie get.advanced.name/<ID>. Er liefert Zeilen mit ip:port, eine pro Adresse. HTTP und SOCKS5 liegen auf demselben Port.
Ein Scraper braucht viele Adressen, schnelle Rotation und keinen Traffic-Zähler. Ein Paket von Advanced.name gibt Ihnen 5.000 bis 50.000 IPv4-Adressen über einen Link, bis zu 5.000 parallele Threads und einen Pool, in dem jeden Tag etwa ein Drittel der Adressen wechselt.
Vier Dinge entscheiden, ob ein Crawl fertig wird oder am ersten Captcha stirbt.
Genug Adressen, damit eine IP die Seite nicht zweimal pro Minute trifft
Von 5.000 (Paket Nr. 1) bis 50.000 (Paket Nr. 6) Adressen in einer Liste
Frischer Pool: Gesperrte IPs müssen raus, bevor Sie bei ihnen ankommen
Etwa ein Drittel des Pools wechselt alle 24 Stunden, die Liste erneuert sich alle 10 Minuten
Parallele Verbindungen für den ganzen Crawl
500 bis 5.000 Threads je nach Paket, alle Protokolle auf einem Port
Niemand, der Gigabytes zählt
Keine Traffic-Grenze auf unbegrenzten Paketen: Sie zahlen für Paket und Threads
Region, Paket, Laufzeit. Der Preis gilt für eine freigegebene IP; jede weitere IP kostet 10 % mehr.
Nach der Zahlung zeigt der Kundenbereich einen Link wie get.advanced.name/<ID>. Er liefert Zeilen mit ip:port, eine pro Adresse. HTTP und SOCKS5 liegen auf demselben Port.
Die Liste öffnet sich nur von IPs, die Sie im Kundenbereich eintragen. Login und Passwort in der Scraper-Konfiguration gibt es nicht: Die Adresse ist der Schlüssel.
Liste laden, im Kreis durchlaufen, eine URL beim Scheitern mit dem nächsten Proxy wiederholen. Das Skript unten macht genau das mit der Standardbibliothek.
Setzen Sie CSV_URL auf Ihren Export aus dem Kundenbereich, stellen Sie COUNTRY und MIN_SPEED ein und schreiben Sie die Ziel-URLs in urls.txt. Das Skript behält nur das gewünschte Land, holt jede URL über den nächsten Proxy und wiederholt beim Scheitern mit einer anderen Adresse. Prüfen Sie den Pool vorher mit dem 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()
Übergeben Sie den Proxy pro Anfrage: Bauen Sie einen Opener mit ProxyHandler oder geben Sie requests proxies={'http': 'http://ip:port', 'https': 'http://ip:port'}. HTTP und SOCKS teilen sich einen Port, http:// deckt also beides ab; für SOCKS5 in requests installieren Sie requests[socks] und nehmen socks5h://ip:port, damit DNS auf der Seite des Proxys aufgelöst wird.
Lesen Sie die Liste einmal, laufen Sie sie im Kreis durch und nehmen Sie bei jeder Anfrage die nächste Adresse. Wiederholen Sie eine gescheiterte URL zwei- oder dreimal über einen anderen Proxy, bevor Sie sie fallen lassen; das Skript oben macht genau das.
In Scrapy setzen Sie die Adresse in request.meta['proxy'] oder nutzen eine Middleware für rotierende Proxys, die auf die Datei des Builders zeigt, und halten CONCURRENT_REQUESTS auf oder unter dem Thread-Limit Ihres Pakets. Grafische Crawler wie Octoparse und ParseHub nehmen dieselbe ip:port-Liste in ihren Proxy-Einstellungen.
Filtern Sie den Pool vor einem langen Crawl einmal mit dem Socks List Processor, damit tote Adressen nie beim Parser ankommen. Für einen schnellen Versuch reicht die kostenlose Proxyliste, um den Code zu testen.


Crawling in großem Umfang kostet auf einem unbegrenzten Paket weniger. Websites, die Listenadressen sperren, passieren Sie mit Resi Core, Städtedaten holen Sie mit Resi Prime.
Crawling im großen UmfangBeste Wahl
Traffic wird nicht gezählt: Gigabytes an HTML und Bildern ändern den Preis nicht. Ein Drittel der Adressen wechselt täglich, gesperrte fliegen aus der Liste.
$700 pro Monatoder $2.70 pro Stunde
Geschützte Websites
Eine neue private IP bei jeder Anfrage. Nehmen Sie es für Websites, auf denen Paketadressen an ein Captcha geraten. Das Land legen Sie im Verbindungsstring fest.
ab $0.49 pro GB1 GB für $0.85
Daten auf Stadtebene
Stadt, Region, ISP und ASN im Verbindungsstring. Sie brauchen das, wenn eine Website verschiedenen Städten verschiedene Daten liefert.
ab $1.39 pro GB1 GB für $2.29
Paket wählen, Gratisstunde nehmen, Scraper am echten Pool laufen lassen.