Anmelden Registrieren
Web-Scraping

Proxys für Web-Scraping, die eine Sperrwelle überstehen

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.

  • bis 50.000 IPs pro Paket
  • bis 5.000 Threads
  • Traffic wird nicht gezählt
Serverschränke mit türkisen Statuslampen: der Proxy-Pool für Web-Scraping
Web-Scraping

Was ein Scraper braucht und was das Paket bietet

Vier Dinge entscheiden, ob ein Crawl fertig wird oder am ersten Captcha stirbt.

Was die Aufgabe brauchtWas das Paket bietet

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

Unbegrenzte Proxys

Das Paket für die Größe Ihres Crawls wählen

Region, Paket, Laufzeit. Der Preis gilt für eine freigegebene IP; jede weitere IP kostet 10 % mehr.

Region
Laufzeit
Freigegebene IPs
1 +10 % pro IP ab der zweiten
Empfohlen für diese Aufgabe
$0
  • Proxys im Paket
  • Threads
  • Freigegebene IPs1
  • ProtokolleHTTP / SOCKS5
Alle 13 Pakete in der Preistabelle

Drei Schritte von der Zahlung bis zur ersten Seite

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.

IP Ihres Servers freigeben

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.

Im Code rotieren

Liste laden, im Kreis durchlaufen, eine URL beim Scheitern mit dem nächsten Proxy wiederholen. Das Skript unten macht genau das mit der Standardbibliothek.

Fertiger Scraper: Rotation, Wiederholung, Filter nach Land

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.

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, ...
Die Werte kommen aus dem Formular; kopieren Sie die fertige Datei oder laden Sie sie herunter.
Skriptcode anzeigen
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()
Einrichtung

Den Pool an Ihren Scraper anschließen

requests und urllib

Ü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.

Scrapy, Octoparse und fertige Crawler

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.

Aus der Praxis

Wo der Pool steht

Vier Gewohnheiten, die einen Crawl am Leben halten

  1. Erneuern Sie die Liste alle 10 Minuten und streichen Sie Adressen, die daraus verschwunden sind: Sie wurden aus gutem Grund ausgetauscht.
  2. Lassen Sie eine IP für ein paar Anfragen auf einer Seite und gehen Sie dann weiter. Ein Durchlauf über 20.000 Adressen gönnt jeder IP eine lange Pause.
  3. Setzen Sie ein Timeout von 10 bis 15 Sekunden und wiederholen Sie mit dem nächsten Proxy, statt zu warten.
  4. Passen Sie die Region an die Seite an: europäische Shops über Europa, russische Kleinanzeigen über GUS, chinesische Marktplätze über China.
FAQ

Fragen zu dieser Aufgabe

Wie viele Threads bekommt ein Scraper?
So viele, wie das Paket erlaubt: 500 bei Paket #1, 5000 bei Paket #6. Resi Core und Resi Prime haben keine Thread-Grenze. Ein Thread ist eine offene Verbindung zum Pool.
Rotieren die Proxys von selbst?
Die Liste rotiert: Etwa ein Drittel der Adressen wechselt täglich. In Ihrem Code wählen Sie die nächste Adresse selbst, so behalten Sie das Tempo in der Hand.
HTTP oder SOCKS5 fürs Scraping?
Beides. Die Protokolle antworten auf demselben Port, nehmen Sie also, was Ihre Bibliothek unterstützt. Für urllib und curl ist HTTP der kürzeste Weg.
Kann ich vor der Zahlung testen?
Ja. Eine Gratisstunde auf jedes Paket mit allen Threads, ohne Karte. Genug für einen echten Crawl und einen Blick auf die Fehlerquote.
Wann braucht ein Scraper Resi statt eines Pakets?
Wenn eine Website Adressen aus geteilten Listen schneller sperrt, als Sie sie durchlaufen. Resi Core liefert bei jeder Anfrage eine private IP, Resi Prime ergänzt die Städtewahl. Der Rest des Crawls kostet auf einem Paket weniger, wo Traffic nicht gezählt wird.
Tarife für diese Aufgabe

Was man für Web-Scraping nimmt

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.

Unbegrenzte Proxys

Crawling im großen UmfangBeste Wahl

Paket #3 · World MIX · 20.000 IP · 2000 Threads

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

Resi Core

Geschützte Websites

2M+ IPs · über 200 Länder · ohne Thread-Grenze

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

Resi Prime

Daten auf Stadtebene

30M+ IPs · 220 Länder · ohne Thread-Grenze

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

Den Crawl innerhalb einer Stunde starten

Paket wählen, Gratisstunde nehmen, Scraper am echten Pool laufen lassen.

Preise Gratisstunde holen