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.
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.
Ein Tracker besucht jede Stunde dieselben Seiten. Genau dieses Muster wird gesperrt, und der Pool muss es verbergen.
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
Zehntausend Artikel pro Stunde passen in Paket Nr. 3; eine Beobachtung ganzer Marktplätze braucht Nr. 4 oder größer.
Jeder Shop bekommt eine eigene Warteschlange und einen eigenen Anteil an der Proxyliste. Große Marktplätze bekommen den größten Anteil.
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.
Adressen verlassen den Pool, wenn sie alt werden. Der Link liefert stets den aktuellen Bestand, lesen Sie ihn also per Timer neu ein.
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.
#!/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()
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.
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.



Ein stündlicher Katalogdurchlauf lohnt sich auf einem unbegrenzten Paket. Streng geschützte Shops und Städtepreise brauchen Residential-Adressen.
Katalog jede StundeBeste Wahl
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
Strenge Shops
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
Städtepreise
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
Paket wählen, Gratisstunde nehmen, den Tracker über den ganzen Katalog laufen lassen.