Haben Sie den Parser auf Wildberries oder Ozon gestartet, die Proxys konfiguriert, und nach einer Stunde sind Sie auf Limits gestoßen und haben eine Menge gesperrter IPs erhalten — obwohl Sie nur ein paar Tausend Karten gesammelt haben? Das Problem ist fast immer dasselbe: URL-Parameter. Filter, Sortierungen, Paginierung und UTM-Parameter verwandeln einen Katalog in Zehntausende von technischen Duplikaten, und der Parser umgeht sie alle brav, anstatt einzigartige Daten zu sammeln.
Was sind Seiten-Duplikate aufgrund von URL-Parametern
Ein Seiten-Duplikat ist eine URL, die sich technisch von einer anderen unterscheidet, aber denselben oder fast denselben Inhalt liefert. Ein klassisches Beispiel: Der Katalog für Kleider auf Wildberries ist unter der Adresse /catalog/zhenshchinam/odezhda/platya verfügbar, aber dasselbe Ergebnis, sortiert nach Preis, wird bereits zu /catalog/zhenshchinam/odezhda/platya?sort=price. Fügen Sie einen Filter nach Größe, Marke, Farbe, Preisspanne hinzu — und am Ende erhalten Sie Hunderte von Kombinationen von Parametern, von denen jede formal eine einzigartige URL ist.
Für den lebenden Benutzer ist das praktisch: Filter ausgewählt — das gewünschte Produkt gesehen. Aber für den Parser, der Links nach einem Muster durchläuft oder der Paginierung folgt, ist jede solche Kombination eine separate Seite, die geladen, geparst und gespeichert werden muss. Wenn keine Regeln festgelegt werden, wird der Roboter in einen endlosen Filterstrudel „fallen“: Sortierung nach Preis → Filter nach Marke → Filter nach Größe → erneut Sortierung, aber in anderer Reihenfolge. Die Anzahl der einzigartigen URLs wächst exponentiell, während die nützlichen Daten darin nicht zunehmen — es sind dieselben Produktkarten, nur in anderer Reihenfolge oder mit einem reduzierten Set.
Eine separate Kategorie von Duplikaten sind UTM-Parameter und Sitzungsparameter (utm_source, clid, _openstat). Diese haben überhaupt keinen Einfluss auf den Inhalt der Seite, aber wenn der Parser Links von anderen Seiten der Website so sammelt, wie sie sind, wird er das gleiche Produkt dutzende Male mit unterschiedlichen Anhängen in der Adresse ziehen.
Warum ist das gerade für den Parser kritisch
Für einen SEO-Spezialisten sind Seiten-Duplikate ein Problem der Indizierung und der Verwässerung des Wertes. Für jemanden, der den Marktplatz zum Zweck der Preisüberwachung oder der Sammlung des Sortiments parst, sind Duplikate ein direkter Verlust von Geld und Zeit, und zwar in drei Richtungen gleichzeitig.
Erstens, jeder Download einer duplizierten Seite ist eine Anfrage über einen Proxy. Wenn Sie kostenpflichtige rotierende Proxys verwenden (und ohne sie kommt man nicht um die Schutzmaßnahmen von Wildberries und Ozon herum), zahlen Sie auch für den Traffic von nutzlosen Anfragen. Bei einem Umfang von Zehntausenden von Karten erhöhen zusätzliche 30-40% Anfragen zu Duplikaten spürbar die Ausgaben.
Zweitens, die Geschwindigkeit der Sammlung sinkt erheblich. Wenn Ihr Parser physisch in der Lage ist, 10 Anfragen pro Sekunde zu stellen, und ein Drittel davon auf Seiten mit denselben Daten geht, sinkt die tatsächliche Geschwindigkeit der Sammlung einzigartiger Inhalte auf 6-7 Karten pro Sekunde. Bei großen Katalogen ist dies der Unterschied zwischen dem Sammeln in einer Stunde und in einem halben Tag.
Drittens, und das ist das schmerzhafteste — das Risiko einer IP-Sperrung steigt proportional zur Anzahl der Anfragen. Die Anti-Bot-Systeme der Marktplätze zählen die Häufigkeit der Anfragen von einer Adresse. Wenn Sie dreimal mehr Anfragen stellen, als nötig sind, um die Ziel-Daten zu sammeln, erschöpfen Sie dreimal schneller das „Vertrauensguthaben“ des Proxys und geraten in eine CAPTCHA oder Sperrung.
Echte Beispiele: Wildberries, Ozon, Avito
Auf Wildberries kann derselbe Katalog mit den Parametern ?sort=popular, ?sort=rate, ?sort=newly sowie den Filtern fbrand, fsize, priceU ausgegeben werden. Wenn der Parser Links „Karte → ähnliche Produkte → erneut Karte“ sammelt, generiert er leicht URLs mit Kombinationen all dieser Parameter, obwohl sich das Set der Produkte zu 90% überschneidet.
Bei Ozon gibt es eine ähnliche Geschichte mit dem Parameter ?sorting= und Filtern nach Produkteigenschaften — dort gibt es noch mehr Kombinationen, da jede Kategorie ihr eigenes Set von Filtern hat (Material, Volumen, Farbe usw.).
Bei Avito ist das eine separate Problematik — Geolokalisierungsparameter und Suchradius (?radius=, ?district=). Dasselbe Angebot kann in den Ergebnissen mit verschiedenen Kombinationen dieser Parameter „auftauchen“, und ein naiver Parser wird dies als verschiedene Funde betrachten und die Datenbank mit duplizierten Einträgen aufblähen.
Wie Duplikate das Budget für Proxys und Zeit aufbrauchen
Lassen Sie uns ein hypothetisches Beispiel rechnen. Angenommen, eine Kategorie hat 500 einzigartige Produkte, aber aufgrund von 8 Sortierungsvarianten und 12 Kombinationen von beliebten Filtern umgeht der Parser ohne URL-Normalisierung nicht 500, sondern 4000-5000 Seiten mit Listings plus wiederholte Zugriffe auf dieselben Karten. Wenn eine Anfrage über einen Resident-Proxy eine hypothetische Einheit Traffic kostet, dann geben Sie bei naivem Durchlaufen 8-10 Mal mehr aus, als nötig wäre, um dasselbe Volumen an einzigartigen Daten zu erhalten.
Schlimmer noch, wiederholte Anfragen von derselben IP an ähnliche URLs sind ein charakteristisches Muster für Anti-Bot-Systeme. Je höher die Häufigkeit und Gleichförmigkeit der Anfragen, desto schneller wird der Schutz aktiviert. Es entsteht ein Teufelskreis: Duplikate erhöhen die Anzahl der Anfragen → die Belastung des Proxy-Pools steigt → IPs werden schneller gesperrt → man muss häufiger die Proxys wechseln und die Sammlung neu starten → die Gesamtzeit und die Kosten des Parsings steigen noch mehr.
In der Praxis sieht das so aus: Ein Verkäufer möchte die Preise von 200 Wettbewerbern auf Wildberries einmal täglich überwachen, aber aufgrund der nicht bereinigten URLs macht sein Skript 15.000 Anfragen statt 2.000, stößt auf die Limits des Proxy-Pools und erhält am Abend unvollständige Daten statt am Morgen.
Wie man Duplikate vor dem Start des Parsers erkennt
Bevor Sie die Sammlung skalieren, sollten Sie eine Stunde für die Analyse der URL-Struktur der Ziel-Website aufwenden. Hier ist eine praktische Vorgehensweise:
- Öffnen Sie den Zielkatalog im Browser und durchlaufen Sie manuell die Filter und Sortierungen — notieren Sie, welche Parameter in der Adresszeile erscheinen.
- Überprüfen Sie, ob sich der Inhalt der Seite ändert, wenn Sie einen Parameter hinzufügen, der keinen Einfluss auf die Ausgabe hat (z.B. UTM-Parameter) — wenn der Inhalt derselbe ist, sollte dieser Parameter bei der Sammlung ignoriert werden.
- Schauen Sie sich
rel="canonical"im Quellcode der Seite an — Websites geben oft selbst an, welche URL als „hauptsächlich“ für duplizierte Varianten gilt. - Erstellen Sie eine kleine Teststichprobe aus 100-200 URLs und führen Sie diese durch eine einfache Duplikation nach Schlüsselparametern — sehen Sie, wie stark sich die Liste verkürzt.
- Überprüfen Sie die robots.txt — manchmal sind dort bereits Disallow-Direktiven für parametrisierte URLs festgelegt, das ist auch ein Hinweis darauf, welche Parameter als „Müll“ gelten.
Normalisierung von URLs: Regeln und Beispiele
Normalisierung bedeutet, URLs in eine einheitliche kanonische Form zu bringen, bevor entschieden wird, ob sie umgangen werden sollen. Grundprinzip: „bedeutende“ Parameter (z.B. die Seitenzahl der Paginierung oder Kategorie) herausfiltern und „unbedeutende“ (Sortierung, UTM, Sitzungsidentifikatoren) abweisen.
Praktisches Beispiel für eine Normalisierungsregel für einen Katalog ähnlich wie Wildberries:
import urllib.parse as up
IGNORED_PARAMS = {"sort", "utm_source", "utm_medium", "utm_campaign", "clid", "_openstat"}
def normalize_url(url: str) -> str:
parsed = up.urlparse(url)
query = up.parse_qsl(parsed.query)
# nur bedeutende Parameter behalten, andere verwerfen
filtered = [(k, v) for k, v in query if k not in IGNORED_PARAMS]
filtered.sort() # bringen die Reihenfolge der Parameter in eine einheitliche Form
new_query = up.urlencode(filtered)
return up.urlunparse(parsed._replace(query=new_query))
Nach der Normalisierung werden alle Varianten eines und desselben Listings mit unterschiedlicher Sortierung in eine URL zusammengeführt. Bevor eine Anfrage über den Proxy gesendet wird, überprüft der Parser, ob diese normalisierte Adresse bereits aufgetaucht ist — wenn ja, wird sie übersprungen. Das ist der günstigste Weg, die Anzahl der Anfragen ohne Verlust an Datenvollständigkeit zu reduzieren.
Für einfache Fälle kann dieselbe Logik auch ohne Code umgesetzt werden — über die Einstellungen des Parsing-Tools: „Parameter ignorieren“ angeben und die Liste auflisten oder einen regulären Ausdruck festlegen, um den URL-Anhang nach dem Fragezeichen abzuschneiden, wenn die Parameter überhaupt keine bedeutenden Informationen für Ihre Aufgabe tragen.
Einstellungen des Parsers zur Ignorierung von Parametern
Die meisten fertigen Lösungen zur Datensammlung von Marktplätzen und Parsing-Builder unterstützen Regeln zur Ausschluss von URL-Parametern auf Projektebene. Hier sind einige Punkte, die Sie zuerst überprüfen und einstellen sollten:
- Liste der ignorierten Parameter. Fügen Sie dort alle während der Analyse gefundenen Sortierungen, UTM-Parameter und Sitzungsidentifikatoren hinzu.
- Duplikation nach Hash des normalisierten URL. Viele Parser speichern eine Liste bereits besuchter Adressen — wichtig ist, dass der Vergleich auf der normalisierten Version und nicht auf der ursprünglichen Zeichenfolge erfolgt.
- Begrenzung der Tiefe der Filterdurchläufe. Wenn die Aufgabe darin besteht, das Sortiment einer Kategorie zu sammeln, reicht ein „Basis“-Durchlauf ohne Sortierungen und Filter aus, anstatt rekursiv alle Kombinationen zu durchlaufen.
- Priorisierung der Paginierung über Filter. Wenn die Website eine vollständige Liste von Produkten über die Seitenavigation bereitstellt, ist das normalerweise ausreichend — es ist überflüssig, dasselbe Listing separat mit angewendeten Filtern zu durchlaufen.
Nach einer solchen Einstellung reduziert sich die Anzahl der Anfragen normalerweise um das 3- bis 6-fache, abhängig davon, wie „parametrisiert“ der Katalog der Quell-Website ist.
Die Rolle von Proxys beim Skalieren des Parsings
Selbst nach idealer Normalisierung der URLs erfordert das Parsen großer Kataloge von Wildberries oder Ozon die Verteilung der Anfragen auf viele IP-Adressen — andernfalls wird der Anti-Bot-Schutz schnell anomale Aktivitäten von einer Quelle erkennen. Hier ist es wichtig, den richtigen Typ von Proxy für die Aufgabe auszuwählen.
Für die großflächige Sammlung von Produktkarten und Preisüberwachung, wo Volumen und Geschwindigkeit bei angemessenen Kosten wichtig sind, genügen normalerweise Rechenzentrums-Proxys — sie sind schneller und günstiger als Resident-Proxys, was bei Millionen von Anfragen pro Tag entscheidend ist. Wenn jedoch der Schutz der Website aggressiv IP-Bereiche von Rechenzentren sperrt, sollte man auf Resident-Proxys umschalten, die wie normale Benutzer von echten Anbietern aussehen und seltener unter Verdacht geraten.
Für punktuelle Aufgaben — z.B. zur Überprüfung, wie der Preis eines bestimmten Produkts von einem mobilen Gerät in einer bestimmten Region angezeigt wird — sind mobile Proxys nützlich, die eine Verbindung über einen Mobilfunkanbieter emulieren und fast nie massenhaft blockiert werden.
Es ist wichtig zu verstehen: Die richtige Auswahl von Proxys ersetzt nicht die Normalisierung der URLs, sondern ergänzt sie. Ohne die Bereinigung von Duplikaten verbrennen Sie einfach schneller selbst den qualitativ hochwertigsten Pool von IP-Adressen. Zuerst reduzieren Sie die Anzahl der nutzlosen Anfragen, dann skalieren Sie die verbleibenden über die Rotation von Proxys — genau in dieser Reihenfolge ergibt es die größte Einsparung.
Checkliste vor dem Start der Datensammlung
Bevor Sie den Parser im großen Maßstab starten, gehen Sie eine kurze Liste von Überprüfungen durch:
| Überprüfungspunkt | Warum das nötig ist |
|---|---|
| Liste der Sortierungs- und Filterparameter identifiziert | Verstehen, welche URLs als Duplikate gelten können |
| Regel zur Normalisierung von URLs eingestellt | Duplikate in eine kanonische Adresse zusammenfassen |
| Duplikation nach Hash aktiviert | Wiederholte Lade von denselben Daten ausschließen |
| Proxy-Typ auf Volumen und Aggressivität des Schutzes abgestimmt | Risiko einer Sperrung senken und Sammlung beschleunigen |
| Anfrage-Limits pro IP mit einem Puffer festgelegt | Massenhafte Sperrung des Proxy-Pools vermeiden |
Fazit
Filter, Sortierungen und Dienstparameter in URLs sind nicht nur technische Kleinigkeiten, sondern eine der Hauptquellen für nutzlosen Traffic beim Parsen von Marktplätzen. Ohne die Normalisierung von URLs kann der Parser 5-10 Mal mehr Anfragen stellen, als nötig ist, um dieselben Daten zu erhalten, was sich direkt auf das Budget für Proxys, die Geschwindigkeit der Sammlung und das Risiko von Blockierungen auswirkt.
Die Lösung ist einfach formuliert, erfordert jedoch Disziplin in der Vorbereitungsphase: Analysieren Sie die URL-Struktur der Ziel-Website, bestimmen Sie, welche Parameter den Inhalt beeinflussen und welche nicht, richten Sie die Duplikation nach der normalisierten Adresse ein und skalieren Sie erst dann die Sammlung über die Rotation von Proxys. Wenn Ihre Aufgabe eine stabile Preis- und Sortimentüberwachung auf Wildberries, Ozon oder Avito in großem Umfang ist, sollten Sie mit Resident-Proxys beginnen — sie bieten das beste Gleichgewicht zwischen Vertrauen in Anti-Bot-Systeme und Flexibilität bei der Anpassung an spezifische Aufgaben.