Anmelden Registrieren
Preisbeobachtung

Proxys für Preisbeobachtung, die Shops nicht bemerken

Shops zeigen verschiedenen Regionen verschiedene Preise und sperren jeden, der von einer Adresse zu oft fragt. Ein Preis-Tracker auf Advanced.name verteilt seine Anfragen auf Zehntausende IPv4-Adressen und fragt jeden Shop aus der Region seiner Käufer.

  • 30.000 IPs in Paket Nr. 4
  • Preise aus der Region des Käufers
  • Liste alle 10 Minuten neu
Lagergang mit einem Tablet, das ein Preisdiagramm zeigt
Preisbeobachtung

Was ein Preis-Tracker braucht und was das Paket bietet

Ein Tracker besucht jede Stunde dieselben Seiten. Genau dieses Muster wird gesperrt, und der Pool muss es verbergen.

Was die Aufgabe brauchtWas das Paket bietet

Eine andere IP für jeden Besuch desselben Produkts

Paket Nr. 4 hält 30.000 Adressen: Eine Produktseite sieht dieselbe IP einmal im Monat

Preise so, wie Käufer vor Ort sie sehen

Pools Europa, GUS und China; World MIX für die USA und andere Märkte

Tausende Artikel jede Stunde geprüft

Bis zu 2.500 Threads in Paket Nr. 4, 5.000 in Paket Nr. 6

Seiten mit Bildern und Skripten, nicht nur JSON

Kein Traffic-Limit: Laden Sie ganze Seiten so oft, wie der Zeitplan es vorsieht

Unbegrenzte Proxys

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

Zehntausend Artikel pro Stunde passen in Paket Nr. 3; eine Beobachtung ganzer Marktplätze braucht Nr. 4 oder größer.

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 zur ersten Preisaufnahme

Den Katalog nach Shops aufteilen

Jeder Shop bekommt eine eigene Warteschlange und einen eigenen Anteil an der Proxyliste. Große Marktplätze bekommen den größten Anteil.

Rotieren und wiederholen

Für jede Anfrage die nächste Adresse nehmen, zweimal mit einer anderen wiederholen, den Preis zusammen mit der IP protokollieren, die ihn geholt hat.

Liste alle 10 Minuten erneuern

Adressen verlassen den Pool, wenn sie alt werden. Der Link liefert stets den aktuellen Bestand, lesen Sie ihn also per Timer neu ein.

Fertiger Preismonitor: eine Anfrage pro Produkt, mit Rotation

Füllen Sie products.txt mit Produkt-URLs und stellen Sie COUNTRY ein. Jedes Produkt wird über den nächsten Proxy geholt, der Preis herausgezogen und in prices.csv geschrieben. Passen Sie PRICE_RE an das Markup des Shops an. Probieren Sie es zuerst mit der kostenlosen Proxyliste aus.

CSV export link from your dashboard
buyers' country: prices are read as local shoppers see them
one product URL per line
regex, group 1 = the price
url;price;proxy;country is written here
Die Werte kommen aus dem Formular; kopieren Sie die fertige Datei oder laden Sie sie herunter.
Skriptcode anzeigen
Python 3.8+ · prices.py
#!/usr/bin/env python3
"""Price monitor for Advanced.name proxies.

Fetches product pages through proxies from the buyer's country and pulls the
price out of each page. One request per product goes through the next proxy, so
a shop sees the same address rarely. Standard library only. python3 prices.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # buyers' country: prices are read as local shoppers see them
MIN_SPEED = 3
PRODUCTS_FILE = "products.txt"           # one product URL per line
PRICE_RE = r'"price"\s*:\s*"?([0-9][0-9.,]*)'   # regex, group 1 = the price
OUT_FILE = "prices.csv"                   # url;price;proxy;country is written here
THREADS = 40
TIMEOUT = 20
RETRIES = 3
# ============================================================================

import csv
import io
import itertools
import re
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed

COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED = 0, 1, 2, 3
UA = "Mozilla/5.0 (compatible; price-monitor/1.0)"
PRICE = re.compile(PRICE_RE)


def load_proxies():
    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
        if COUNTRY and row[COL_COUNTRY].strip().upper() != COUNTRY.upper():
            continue
        if int(row[COL_SPEED] or 0) < MIN_SPEED:
            continue
        pool.append(row[COL_IP].strip() + ":" + row[COL_PORT].strip())
    return pool


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies for COUNTRY=%r." % COUNTRY)
    with open(PRODUCTS_FILE, encoding="utf-8") as fh:
        products = [line.strip() for line in fh if line.strip() and not line.startswith("#")]
    print("proxies: %d (%s), products: %d" % (len(proxies), COUNTRY, len(products)))

    rotation = itertools.cycle(proxies)
    lock = threading.Lock()

    def grab(url):
        for _ in range(RETRIES):
            with lock:
                proxy = next(rotation)
            handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
            req = urllib.request.Request(url, headers={
                "User-Agent": UA, "Accept-Language": COUNTRY.lower() + "," + COUNTRY.upper()})
            try:
                html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
            except Exception:
                continue
            match = PRICE.search(html)
            return (match.group(1) if match else "not found"), proxy
        return "unreachable", ""

    rows = []
    with ThreadPoolExecutor(max_workers=THREADS) as pool:
        futures = {pool.submit(grab, u): u for u in products}
        for fut in as_completed(futures):
            url = futures[fut]
            price, proxy = fut.result()
            rows.append((url, price, proxy, COUNTRY))
            print("%-9s %s" % (price, url[:60]))

    with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
        writer = csv.writer(out, delimiter=";")
        writer.writerow(["url", "price", "proxy", "country"])
        writer.writerows(rows)
    print("written %s (%d rows)" % (OUT_FILE, len(rows)))


if __name__ == "__main__":
    main()
Einrichtung

Einen Preis-Tracker einrichten

Ihr eigener Parser

Holen Sie jede Produktseite über den nächsten Proxy und ziehen Sie den Preis aus dem JSON-LD-Block oder dem Preisknoten; das Skript oben nutzt einen regulären Ausdruck, den Sie pro Shop anpassen. Senden Sie Accept-Language und Währungs-Cookie der Region mit der lokalen IP, sonst leitet der Shop Sie womöglich in einen anderen Markt um.

Planen Sie nach Dringlichkeit: Bestand jede Stunde, Preise zweimal am Tag. Speichern Sie den HTTP-Status zu jedem Preis, dann zeigt Ihnen eine Häufung von 403 bei einem Shop, dass Sie dort langsamer werden sollten und nicht überall.

Fertige Werkzeuge und Tabellen

Dienste zur Preisbeobachtung und Scraper ohne Code (Octoparse, Web Scraper) nehmen eine Proxyliste in den Einstellungen, fügen Sie dieselbe ip:port-Datei ein. Selbst IMPORTXML in Google Sheets läuft für leichte Prüfungen hinter einem kleinen Proxy-Relay.

Halten Sie den Pool mit dem Proxy-Checker frisch und testen Sie den Ablauf mit der kostenlosen Proxyliste, bevor Sie auf den ganzen Katalog hochgehen.

Aus der Praxis

Was der Tracker sieht

Vier Regeln für saubere Preisdaten

  1. Senden Sie Accept-Language und Währungs-Cookies der Zielregion zusammen mit der regionalen IP; sonst leitet der Shop Sie womöglich trotzdem um.
  2. Achten Sie auf gecachte oder personalisierte Preise: Zwei IPs aus demselben Land sollten dieselbe Zahl liefern.
  3. Speichern Sie den HTTP-Status zu jedem Preis. Eine Häufung von 403 bei einem Shop heißt: dort langsamer werden, nicht überall.
  4. Halten Sie eine kleine Reserve an Threads für Nachprüfungen von Artikeln, deren Preis um mehr als 20 % gesprungen ist.

GB-Tarife für diese Aufgabe

Diese Aufgabe nach Land

Alle Länder anzeigen
FAQ

Fragen zu dieser Aufgabe

Wie oft darf ich ein Produkt prüfen?
Stündlich ist mit Paket Nr. 4 unbedenklich: Bei 30.000 Adressen trifft eine Produktseite etwa einmal im Monat auf dieselbe IP.
Sehe ich lokale Preise?
Ja, wenn die IP aus der Region des Shops stammt und Ihre Anfrage die Sprach- und Währungsheader der Region mitbringt.
Was ist mit Marktplätzen voller JavaScript?
Der Traffic wird nicht gezählt, ein Headless-Browser über den Proxy ist also kein Problem. Geben Sie ihm 15 bis 20 Sekunden Timeout und eine frische IP pro Sitzung.
Kann ich es zuerst an meinem Katalog ausprobieren?
Eine Teststunde auf jedes Paket ist gratis, mit allen Threads. Lassen Sie Ihren Tracker eine Stunde laufen und vergleichen Sie die Fehlerquoten.
Wie sammle ich Preise nach Stadt?
Über Resi Prime: Sie legen die Stadt im Verbindungsstring fest, und der Shop liefert den lokalen Preis und das Lieferdatum. Unbegrenzte Pakete und Resi Core arbeiten bis zur Länderebene.
Tarife für diese Aufgabe

Was man für Preisbeobachtung nimmt

Ein stündlicher Katalogdurchlauf lohnt sich auf einem unbegrenzten Paket. Streng geschützte Shops und Städtepreise brauchen Residential-Adressen.

Unbegrenzte Proxys

Katalog jede StundeBeste Wahl

Paket #4 · World MIX · 30.000 IP · 2500 Threads

Bei stündlichen Prüfungen trifft eine Produktseite etwa einmal im Monat auf dieselbe IP. Vollständige Seiten erhöhen die Rechnung nicht.

$990 pro Monatoder $4.20 pro Stunde

Resi Core

Strenge Shops

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

Eine private IP aus dem Land des Shops bei jeder Anfrage. Für Websites, die Listenadressen statt eines Preises ein Captcha zeigen.

ab $0.49 pro GB1 GB für $0.85

Resi Prime

Städtepreise

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

Stadt und Region im Verbindungsstring. Der Shop zeigt Preis und Lieferung, die ein Käufer in dieser Stadt sieht.

ab $1.39 pro GB1 GB für $2.29

Die Preise von heute Abend aus jedem Shop holen

Paket wählen, Gratisstunde nehmen, den Tracker über den ganzen Katalog laufen lassen.

Preise Gratisstunde holen