Yandex ist die Suchmaschine, die die meisten Menschen in Russland als Erstes aufrufen, und sie hat in mehreren Nachbarländern einen ähnlichen Stellenwert. Schätzungen zufolge hält sie mehr als die Hälfte des russischen Suchmarkts, was ihre öffentlichen Ergebnisse zu einem nützlichen Signal für alle macht, die russischsprachige Nachfrage, regionale Rankings oder die Präsenz einer Marke in einem Markt verfolgen, in dem Google nicht führend ist. Die Ergebnisseite stellt dieselben strukturierten Daten bereit, die ein SERP-Tool überall benötigt: Titel, Links, Snippets und ihre Reihenfolge.
Diese Anleitung zeigt Ihnen, wie Sie Yandex-Suchergebnisse mit Python auf zuverlässige Weise scrapen. Sie bauen einen kleinen, ausführbaren Scraper, der eine gerenderte Ergebnisseite über die Crawling API abruft, jedes organische Ergebnis mit BeautifulSoup analysiert und die Daten nach JSON und CSV exportiert. Die gesamte Anleitung beschränkt sich auf öffentliche Suchergebnis-Daten, die jeder ohne ein Konto sehen kann, und der Abschnitt zur Rechtmäßigkeit am Ende ist kein Boilerplate, also lesen Sie ihn, bevor Sie dies auf reales Volumen anwenden.
Was Sie bauen werden
Ein Python-Skript, das eine öffentliche Yandex-Such-URL entgegennimmt, das HTML über die Crawling API abruft und einen strukturierten Datensatz für jedes organische Ergebnis auf der Seite extrahiert. Wir verwenden die Suchanfrage "Winter Jackets" als laufendes Beispiel und extrahieren diese Felder aus jedem Ergebnis:
- Titel der Titeltext des Ergebnisses, wie er in der Auflistung angezeigt wird.
- URL der Ziellink, auf den das Ergebnis verweist.
- Beschreibung das unter dem Titel angezeigte Snippet.
- Position der Rang des Ergebnisses auf der Seite, von oben gezählt.
Warum eine einfache Anfrage bei Yandex scheitert
Wenn Sie eine rohe HTTP-Anfrage an eine Yandex-Ergebnis-URL aus einem Skript senden, erhalten Sie selten die saubere Seite, die Sie in Ihrem eigenen Browser sehen. Yandex beobachtet automatisierten Traffic genau. Anfragen, die nicht wie ein echter Browser aussehen oder zu schnell von einer Adresse ankommen, werden mit einer Verifikationsseite (dem "Bist du ein Roboter?"-Interstitial) herausgefordert oder direkt blockiert, bevor sie die Einträge erreichen. Dieselbe IP für viele Abfragen zu wiederholen löst diese Prüfungen schnell aus.
Ein funktionierender Yandex-Scraper benötigt also zwei Dinge in einer Anfrage: eine IP, die die Plattform als echten Besucher liest, und, wenn die Seite auf Skripte angewiesen ist, einen Browser, der sie rendert. Sie können das selbst mit einem Headless-Browser und einem Pool rotierender Residential-Proxies zusammenbauen, aber diese gesund zu halten ist der Großteil der Arbeit. Die Crawling API faltet beides in einen einzigen Aufruf: Sie senden ihr die URL, sie ruft von einer vertrauenswürdigen IP ab und rendert bei Bedarf, und gibt fertiges HTML zum Parsen zurück.
Yandexs Anti-Bot-Prüfungen basieren stark auf der Anfragerate pro Adresse. Einige schnelle Anfragen von einer IP reichen aus, um sein Verifikations-Interstitial auszulösen. Die Crawling API rotiert serverseitig durch viele Adressen, sodass Anfragen über sie verteilt werden und keine einzelne ein Limit auslöst. Sie können mit bis zu 20.000 kostenlosen Anfragen beginnen, ohne Kreditkarte.
Voraussetzungen
Sie benötigen einige Dinge, bevor Sie Code schreiben. Keines davon dauert lange.
Python-Grundkenntnisse. Sie sollten mit dem Schreiben und Ausführen eines Python-Skripts und dem Installieren von Paketen mit pip vertraut sein. Falls BeautifulSoup neu für Sie ist, behandelt unser Leitfaden zur Verwendung von BeautifulSoup in Python die Parsing-Grundlagen, die dieses Tutorial voraussetzt.
Python 3.8 oder höher. Prüfen Sie Ihre Version mit python --version. Falls Sie es nicht haben, installieren Sie es von python.org oder über eine Distribution wie Anaconda.
Ein Crawlbase-Konto und Token. Melden Sie sich an, öffnen Sie Ihr Dashboard und kopieren Sie Ihr Anfrage-Token von der Konto-Dokumentationsseite. Crawlbase stellt zwei Token-Typen aus: ein normales Token für statische Seiten und ein JavaScript-Token für skript-intensive. Yandexs organische Ergebnisse kommen im anfänglichen HTML zurück, daher ist das normale Token hier die richtige Wahl. Sie erhalten bis zu 20.000 kostenlose Anfragen. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, also halten Sie es außerhalb der Versionsverwaltung.
Das Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die drei Bibliotheken, die der Scraper benötigt.
python --version python -m venv yandex_env source yandex_env/bin/activate pip install crawlbase beautifulsoup4 pandas
Unter Windows aktivieren Sie die Umgebung mit yandex_env\Scripts\activate statt der source-Zeile. Drei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Client, der Ihre Anfrage an die Crawling API sendet, beautifulsoup4 analysiert das zurückgegebene HTML, sodass Sie Felder per CSS-Selektor extrahieren können, und pandas übernimmt am Ende den Export in CSV.
Schritt 1: Die Seite über die Crawling API abrufen
Beginnen Sie damit, das HTML zu erhalten. Eine Yandex-Such-URL ist die Hauptdomain plus die Abfrage im Parameter text, also sucht https://yandex.com/search/?text=Winter%20Jackets nach "Winter Jackets". Kodieren Sie die Abfrage mit urllib.parse.quote, damit Leerzeichen und Sonderzeichen die Übertragung überstehen. Schreiben Sie eine kleine Funktion fetch_page_html(), die die URL mit Ihrem Token an die Crawling API übergibt, prüft, dass Yandex selbst einen 200-Status zurückgegeben hat, und den dekodierten HTML-Body zurückgibt. Das Prüfen des Status vor dem Parsen hält Fehler laut statt still.
from crawlbase import CrawlingAPI from urllib.parse import quote API_TOKEN = "YOUR_CRAWLBASE_TOKEN" # replace with your Normal token crawling_api = CrawlingAPI({"token": API_TOKEN}) def fetch_page_html(url): response = crawling_api.get(url) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Request failed with Crawlbase status {response['headers']['cb_status']}") return None if __name__ == "__main__": url = f"https://yandex.com/search/?text={quote('Winter Jackets')}" html = fetch_page_html(url) if html: print(html[:500])
Der Aufruf crawling_api.get(url) gibt eine Antwort zurück, deren headers["cb_status"] der von Yandex selbst zurückgegebene Status ist und deren body die rohen Seitenbytes sind. Das Absichern auf cb_status == "200" bedeutet, dass ein Block oder eine Verifikationsseite als sauberer Fehler angezeigt wird, anstatt Datenmüll in den Parser zu füttern. Das Dekodieren des Bodys als UTF-8 hält kyrillische Titel und Beschreibungen lesbar. Speichern Sie die Datei als yandex_scraper.py, führen Sie sie mit python yandex_scraper.py aus und Sie sollten echtes Ergebnis-Markup in den ersten 500 Zeichen sehen, was bestätigt, dass der Abruf funktioniert, bevor Sie einen einzigen Selektor schreiben.
Diese cb_status (legacy pc_status)-Prüfung liest nur 200, weil die Anfrage Yandex aussah wie ein echter Besucher, und das "Bist du ein Roboter?"-Interstitial umging. Die Crawling API ruft die Seite von einer rotierenden IP ab, rendert sie, wenn die Seite einen Browser benötigt, und gibt Ihnen fertiges HTML zurück, sodass Sie weder eine Headless-Flotte betreiben noch selbst einen Residential-Proxy-Pool besorgen müssen. Testen Sie es zuerst mit einer öffentlichen Ergebnis-URL im kostenlosen Tarif.
Schritt 2: Die Ergebnisse mit BeautifulSoup parsen
Mit HTML in der Hand laden Sie es in BeautifulSoup und extrahieren jedes Ergebnis über seinen Selektor. Yandex umschließt jedes organische Ergebnis in einem .serp-item-Container; darin sitzt die Überschrift in h2.organic__url-text, der Ziellink in a.organic__url und das Snippet in div.organic__content-wrapper. Um diese auf einer Live-Seite zu bestätigen, öffnen Sie die Yandex-Ergebnis-URL in Ihrem Browser, klicken Sie mit der rechten Maustaste auf ein Ergebnis, wählen Sie "Untersuchen" und lesen Sie die Klassennamen vom Element ab; die unten aufgeführten Selektoren entsprechen dem Layout zum Zeitpunkt der Erstellung.
from bs4 import BeautifulSoup def scrape_yandex_search(html_content): soup = BeautifulSoup(html_content, "html.parser") search_results = [] for position, result in enumerate(soup.select(".serp-item"), start=1): title_element = result.select_one("h2.organic__url-text") url_element = result.select_one("a.organic__url") description_element = result.select_one("div.organic__content-wrapper") if not title_element or not url_element: continue search_results.append({ "position": position, "title": title_element.get_text(strip=True), "url": url_element["href"], "description": description_element.get_text(strip=True) if description_element else None, }) return search_results
Die Auswahl von .serp-item gibt Ihnen ein Element pro Ergebnis, und enumerate(..., start=1) gibt Ihnen die Position kostenlos beim Durchlaufen, sodass der Rang aus der Seitenreihenfolge stammt statt aus einem fragilen Attribut. Das Lesen der URL aus dem href von a.organic__url hält das Ziel getrennt vom Titeltext. Die Absicherung if not title_element or not url_element: continue überspringt alles, was kein echtes organisches Ergebnis ist, was Anzeigenblöcke und streunende Markup aus Ihrer Ausgabe herausfiltert. Die Beschreibung fällt auf None zurück, wenn ihr Container fehlt.
Yandex überarbeitet sein Frontend-Markup regelmäßig, und Klassennamen wie organic__url-text können sich bei einem Redeployment ändern. Behandeln Sie die obigen Selektoren als Ausgangspunkt, nicht als Vertrag. Wenn ein Feld für jedes Ergebnis leer zurückkommt, prüfen Sie eine Live-Seite erneut in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Pflege ist für jeden Produktions-Scraper normal, kein Zeichen, dass etwas kaputt ist.
Schritt 3: Alles zusammensetzen
Verbinden Sie nun Abruf und Parsen zu einem ausführbaren Skript. Crawlen Sie die gerenderte Ergebnisseite, übergeben Sie das HTML an den Parser und drucken Sie die strukturierte Ausgabe als JSON. Das Setzen von ensure_ascii=False hält kyrillische Zeichen in der Ausgabe lesbar, anstatt sie in \u-Sequenzen zu escapen.
from crawlbase import CrawlingAPI from bs4 import BeautifulSoup from urllib.parse import quote import json API_TOKEN = "YOUR_CRAWLBASE_TOKEN" crawling_api = CrawlingAPI({"token": API_TOKEN}) def fetch_page_html(url): response = crawling_api.get(url) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Request failed with Crawlbase status {response['headers']['cb_status']}") return None def scrape_yandex_search(html_content): soup = BeautifulSoup(html_content, "html.parser") search_results = [] for position, result in enumerate(soup.select(".serp-item"), start=1): title_element = result.select_one("h2.organic__url-text") url_element = result.select_one("a.organic__url") description_element = result.select_one("div.organic__content-wrapper") if not title_element or not url_element: continue search_results.append({ "position": position, "title": title_element.get_text(strip=True), "url": url_element["href"], "description": description_element.get_text(strip=True) if description_element else None, }) return search_results def main(): search_query = "Winter Jackets" url = f"https://yandex.com/search/?text={quote(search_query)}" html_content = fetch_page_html(url) if html_content: search_results = scrape_yandex_search(html_content) print(json.dumps(search_results, ensure_ascii=False, indent=2)) if __name__ == "__main__": main()
Führen Sie das vollständige Skript mit python yandex_scraper.py aus. Es ruft die Ergebnisseite für "Winter Jackets" ab, extrahiert einen Datensatz für jede organische Auflistung und gibt die Liste als formatiertes JSON aus. Dieselben zwei Funktionen sind alles, was Sie brauchen: Tauschen Sie die Abfrage in main() aus und der Parser verarbeitet, was auch immer zurückkommt.
Wie die Ausgabe aussieht
Sie erhalten eine saubere geordnete Liste von Ergebnisobjekten, jedes mit seiner Position, seinem Titel, seiner URL und seiner Beschreibung, bereit zum Schreiben nach JSON, CSV oder in eine Datenbank. Da die Beispielabfrage englische und russischsprachige Onlineshops mischt, können Sie Yandexs regionale Stärke in den Ergebnissen selbst sehen.
[ { "position": 1, "title": "Best Winter Jackets of 2024 | Switchback Travel", "url": "https://www.switchbacktravel.com/best-winter-jackets", "description": "Patagonia Tres 3-in-1 parka. Category: Casual. Fill: 4.2 oz. of 700-fill-power down." }, { "position": 2, "title": "Winter jacket: купить по низкой цене на Яндекс Маркете", "url": "https://market.yandex.ru/search?text=winter%20jacket", "description": "Купить winter jacket: 97 предложений, низкие цены, быстрая доставка." }, { "position": 3, "title": "Amazon.com: Winter Jackets", "url": "https://www.amazon.com/Winter-Jackets/s?k=Winter+Jackets", "description": "CAMEL CROWN Men's Mountain Snow Waterproof Ski Jacket, Detachable Hood, Fleece Parka." } ]
In der echten Ausgabe zu beachten: Der kyrillische Titel in Position 2 behält seine ursprünglichen Zeichen dank der UTF-8-Dekodierung und ensure_ascii=False. Wenn Sie stattdessen \u-Escape-Sequenzen sehen, fehlt einer dieser beiden Schritte.
Über Seiten und Abfragen skalieren
Eine Abfrage auf einer Seite ist eine Demo; ein echter Auftrag läuft über mehrere Suchen und tiefer in die Ergebnisse. Yandex paginiert mit dem Abfrageparameter p, der ein nullbasierter Seitenindex ist: p=0 ist die erste Seite, p=1 die zweite und so weiter. Die Form bleibt dieselbe: Bauen Sie jede URL mit der nächsten Seitennummer, rufen Sie sie über die Crawling API ab und parsen Sie sie mit derselben Funktion. Eine kleine Änderung hält die Positionen seitenübergreifend kontinuierlich, anstatt auf jeder Seite bei 1 neu zu beginnen, und ein kurzer Sleep zwischen Anfragen taktet den Crawl.
import time from urllib.parse import quote def scrape_all_pages(query, max_pages=5): base_url = f"https://yandex.com/search/?text={quote(query)}&p=" all_results = [] position = 1 for page in range(max_pages): html_content = fetch_page_html(base_url + str(page)) if not html_content: break page_results = scrape_yandex_search(html_content) for result in page_results: result["position"] = position position += 1 all_results.extend(page_results) time.sleep(2) # pace requests to respect the server return all_results
Die Schleife durchläuft standardmäßig fünf Seiten, ruft jede über die Crawling API ab und weist eine laufende position neu zu, sodass Ränge von Seite eins bis Seite fünf kontinuierlich bleiben. Das zweisekündige time.sleep zwischen Anfragen verhindert, dass Sie Yandex in einer engen Schleife hämmern. Erhöhen Sie max_pages nur so weit, wie Sie es wirklich benötigen; tiefere Ergebnisse sind ohnehin meist weniger relevant. Wenn Sie Ihren eigenen Traffic lieber über einen rotierenden Pool leiten möchten, anstatt die verwaltete API zu verwenden, gibt Ihnen der Smart AI Proxy dieselbe IP-Rotation als Drop-in-Proxy-Endpunkt.
Export in CSV
JSON ist praktisch im Terminal, aber eine CSV öffnet sich direkt in einer Tabellenkalkulation, was die meisten Analysten tatsächlich möchten. pandas verwandelt die Liste der Ergebnis-Wörterbücher in zwei Zeilen in eine CSV.
import pandas as pd def save_to_csv(results, filename="yandex_search_results.csv"): df = pd.DataFrame(results) df.to_csv(filename, index=False, encoding="utf-8-sig") print(f"Saved {len(results)} results to {filename}") if __name__ == "__main__": results = scrape_all_pages("Winter Jackets", max_pages=3) save_to_csv(results)
Das Erstellen des DataFrame aus der Liste von Wörterbüchern gibt Ihnen eine Spalte pro Feld (Position, Titel, URL, Beschreibung) und eine Zeile pro Ergebnis. Das Übergeben von index=False entfernt den eigenen Zeilenindex von pandas aus der Datei, und encoding="utf-8-sig" schreibt eine Byte-Order-Mark, sodass kyrillische Beschreibungen in Excel korrekt geöffnet werden, anstatt zu Mojibake zu werden. Von hier aus können Sie dasselbe Muster erweitern, um in eine Datenbank wie SQLite zu schreiben, wenn Sie ein abfragefreundliches Speicherformat bevorzugen.
Ungeblockt bleiben
Selbst mit einer für Sie verwalteten vertrauenswürdigen IP beobachtet Yandex scraperförmigen Traffic, und seine Anti-Bot-Prüfungen sind strenger als viele westliche Ziele. Einige Gewohnheiten halten einen Lauf gesund.
- Anfragen takten. Ergebnisseiten in einer engen Schleife zu hämmern ist der schnellste Weg, das Verifikations-Interstitial zu erhalten. Verteilen Sie Anfragen und variieren Sie Ihre Abfragen, anstatt einen Begriff mit voller Geschwindigkeit zu paginieren.
- Auf Rotation setzen. Ein Pool von IP-Adressen verteilt Anfragen, sodass keine einzelne Yandexs adressbezogene Rate-Prüfungen auslöst. Die Crawling API erledigt das für Sie; wenn Sie einen eigenen Stack betreiben, ist das der Teil, den Sie richtig machen müssen.
- Statuscodes lesen. Ein Lauf, der anfängt, Herausforderungen oder Nicht-200-Status zurückzugeben, signalisiert, dass die aktuelle Rate oder IP-Ebene nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückgehen, nicht als Rauschen, das Sie ignorieren.
- Neu prüfen, wenn Felder leer werden. Yandex ändert sein Markup regelmäßig. Wenn Ergebnisse nicht mehr geparst werden, öffnen Sie eine Live-Seite in den Entwicklertools und aktualisieren Sie die Selektoren.
Für das breitere Playbook lesen Sie wie man Websites scrapt ohne gesperrt zu werden und den tieferen Einblick in wie man CAPTCHAs beim Web Scraping umgeht. Derselbe Ansatz gilt für andere Suchmaschinen: Unsere Leitfäden zum Scrapen von Bing-Suchergebnissen und zum Scrapen von Google-Suchseiten verwenden dieselbe Fetch-und-Parse-Struktur mit anderen Selektoren.
Ist es legal, Yandex zu scrapen?
Ob das Scrapen von Yandex erlaubt ist, hängt von Yandexs Nutzungsbedingungen, Ihrer Jurisdiktion und dem ab, was Sie mit den Daten tun. Wie die meisten Suchmaschinen legt Yandex in seinen Bedingungen Grenzen für den automatisierten Zugriff fest, sodass Scraping gegen diese Bedingungen verstoßen kann, unabhängig davon, wie sorgfältig Ihre Werkzeuge sind. Keiner der hier verwendeten Codes ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie Yandexs Bedingungen und seine robots.txt und behandeln Sie beides als Grenze für das, was Sie sammeln.
Einige Grundsätze, an die es sich zu halten lohnt. Sammeln Sie nur öffentliche Suchergebnis-Daten: die Titel, Links, Beschreibungen und Positionen, die jeder auf einer Ergebnisseite ohne ein Konto sehen kann. Halten Sie Ihr Anfragevolumen niedrig genug, dass Sie Yandexs Server nicht belasten, und takten Sie Ihren Crawl, anstatt ihn mit voller Geschwindigkeit laufen zu lassen. Yandex veröffentlicht offizielle Produkte für einige strukturierte Daten, wie Yandex Maps- und Yandex Market-APIs, also ist das der bessere Weg als das Scrapen der SERP, wenn ein sanktionierter Endpunkt für das existiert, was Sie benötigen.
Dieser Leitfaden ist bewusst auf öffentliche Suchergebnis-Seiten beschränkt, weil das die Linie ist, die die Arbeit vertretbar hält. Er behandelt nichts hinter einem Login, keine Konto- oder persönlichen Daten und keine urheberrechtlich geschützten Medien von den verlinkten Zielen. Nur öffentliche SERP-Daten. Wenn Ihr Projekt mehr als das erfordert, ist eine offizielle Datenvereinbarung der richtige Weg, kein cleverer Scraper.
Wichtigste Erkenntnisse
- Yandex ist stark in seiner Region. Es führt die russischsprachige und regionale Suche an, sodass seine öffentlichen Ergebnisse ein nützliches Signal sind, wo Google nicht dominiert.
- Die Crawling API ruft hinter einer vertrauenswürdigen IP ab. Senden Sie ihr die URL, sie rotiert Adressen serverseitig und rendert bei Bedarf, und gibt fertiges HTML zurück, das das "Bist du ein Roboter?"-Interstitial umgeht.
-
BeautifulSoup übernimmt die Extraktion. Wählen Sie jedes
.serp-item, lesen Sie dann Titel, URL, Beschreibung und Position daraus und erwarten Sie, dass sich die Klassennamen im Laufe der Zeit ändern. -
Mit dem p-Index paginieren. Erhöhen Sie
pum eins pro Seite, um tiefer in die Ergebnisse zu gehen, halten Sie Positionen kontinuierlich und takten Sie Anfragen mit einem Sleep zwischen Seiten. - Auf öffentlichen Daten bleiben. Respektieren Sie Yandexs ToS und robots.txt, halten Sie das Volumen niedrig, bevorzugen Sie offizielle APIs wie Yandex Market, wo sie passen, und berühren Sie niemals Konten oder persönliche Daten.
Häufig gestellte Fragen
Was ist Yandex und warum sollte man es scrapen?
Yandex ist die führende Suchmaschine in Russland, oft als "Google Russlands" bezeichnet, und bietet auch Karten, Mail, Marktplatz und Cloud-Dienste an. Menschen scrapen seine öffentlichen Ergebnisse, um russischsprachige und regionale Rankings zu verfolgen, Suchtrends zu untersuchen, zu überwachen, wie Marken in diesem Markt auftauchen, und Daten für Recherchen zu sammeln, die Google-zentrierte Tools verpassen.
Kann ich Yandex-Suchergebnisse mit Python scrapen?
Ja. Mit dem crawlbase-Client und BeautifulSoup können Sie eine Ergebnisseite abrufen und Titel, URLs, Beschreibungen und Positionen extrahieren. Die Crawling API fungiert als Brücke, die Ihre Anfrage von einer vertrauenswürdigen IP an Yandex übermittelt, sodass Anfragen reibungslos verarbeitet werden, anstatt das Verifikations-Interstitial auszulösen. Für eine breitere Python-Einführung lesen Sie unseren Leitfaden zum Scrapen von Websites mit Python.
Warum wird eine einfache Anfrage bei Yandex blockiert?
Yandex kennzeichnet Traffic, der nicht wie ein echter Browser aussieht, und überwacht die Anfragerate pro IP genau. Einige schnelle Anfragen von einer Adresse lösen seine "Bist du ein Roboter?"-Verifikationsseite oder eine vollständige Blockierung aus. Das Abrufen über die Crawling API, die IPs rotiert und bei Bedarf rendert, lässt jede Anfrage wie ein gewöhnlicher Besucher aussehen, sodass Sie die echte Ergebnisseite erhalten.
Wie paginiere ich durch mehr Yandex-Ergebnisse?
Verwenden Sie den Abfrageparameter p, der ein nullbasierter Seitenindex ist: p=0 ist die erste Seite, p=1 die zweite und so weiter. Bauen Sie jede Seiten-URL mit dem nächsten Index, rufen Sie sie über die Crawling API ab, parsen Sie sie mit derselben Funktion, weisen Sie eine laufende Position neu zu, damit Ränge kontinuierlich bleiben, und pausieren Sie ein paar Sekunden zwischen Anfragen, um den Crawl zu takten statt ihn zu hämmern.
Wie gehe ich mit russischsprachigen Ergebnissen und kyrillischem Text um?
Dekodieren Sie den Antwort-Body als UTF-8 beim Lesen, und exportieren Sie beim Export JSON mit ensure_ascii=False oder CSV mit encoding="utf-8-sig". Diese zwei Schritte halten kyrillische Titel und Beschreibungen lesbar, anstatt sie in \u-Escapes oder Mojibake zu verwandeln. Yandexs regionale Stärke bedeutet, dass viele Ergebnisse auf Russisch zurückkommen, was das hier wichtiger macht als bei einem Google-Scrape.
Meine Selektoren geben nichts zurück. Was hat sich geändert?
Höchstwahrscheinlich Yandexs Markup. Klassennamen wie organic__url-text und organic__content-wrapper können sich ändern, wenn Yandex sein Frontend neu deployt, sodass Selektoren, die letzten Monat funktioniert haben, brechen können. Prüfen Sie eine Live-Ergebnisseite erneut in den Entwicklertools Ihres Browsers und aktualisieren Sie die Selektoren. Regelmäßige Selektor-Pflege ist für jeden Produktions-Scraper normal.
Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.
Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.
