Best Buys Such- und Produktseiten sind ein öffentliches Fenster in einen der größten Verbraucherelektronik-Kataloge Nordamerikas. Jedes Suchergebnis und jede Produktseite trägt dieselbe Handvoll Felder, die jeder sehen kann: den Produkttitel, seinen Preis, die Modell- und SKU-Nummern, eine Sternebewertung und ob der Artikel vorrätig ist. Genau diese Felder sind das Signal, das Preisanalysten, Marktforscher und Tech-Käufer verfolgen, wenn sie Elektronikerpreise beobachten oder die Verfügbarkeit in einer Kategorie vergleichen möchten.
Diese Anleitung zeigt Ihnen, wie Sie Best Buy-Produktdaten scrapen mit Python. Sie bauen einen kleinen, ausführbaren Scraper, der Best Buy-Such- und Produktseiten über die Crawling API abruft, einen sauberen Datensatz für jeden Eintrag parst, über Ergebnisseiten paginiert und die Ergebnisse nach JSON und CSV exportiert. Der gesamte Walkthrough beschränkt sich auf öffentliche Katalogdaten: die Titel, Preise, Modelle, Bewertungen und Verfügbarkeit, die jeder auf Best Buy ohne Login lesen kann.
Was Sie bauen werden
Ein Python-Skript, das eine Best Buy-Such-URL entgegennimmt, die gerenderte Seite über die Crawling API abruft und einen strukturierten Datensatz pro Produkt extrahiert. Wir verwenden eine Suche nach "i phone" als durchgehendes Beispiel, dieselbe Anfrage, die der frühere Walkthrough verwendete, und extrahieren folgende Felder aus jeder Eintrags-Karte:
- Titel der auf der Eintrags-Karte angezeigte Produktname.
- Preis der aktuelle Kundenpreis, wenn das Produkt einen zeigt.
- Modell / SKU die Hersteller-Modellnummer und Best Buys eigener SKU-Identifikator.
- Bewertung die durchschnittliche Sternebewertung mit der Bewertungsanzahl daneben.
- Verfügbarkeit ob der Artikel vorrätig, ausverkauft oder versandbereit ist.
- Produkt-URL der absolute Link zur eigenen Detailseite des Produkts.
Warum eine einfache Anfrage bei Best Buy scheitert
Wenn Sie einen einfachen HTTP-Client auf eine Best Buy-Such-URL richten, bekommen Sie fast nie die Produktliste, die Sie suchen. Best Buy rendert seine Suchergebnisse clientseitig: Der Server liefert eine leichte Hülle und das JavaScript auf der Seite füllt die Produktkarten anschließend. Das rohe HTML, das Sie von einem einfachen requests.get() erhalten, enthält die Einträge überhaupt nicht, und Ihr Parser findet eine leere Liste vor.
Das zweite Problem ist Bot-Erkennung. Best Buy markiert automatisierten Datenverkehr schnell. Datacenter-IP-Bereiche und Anfragemuster, die nicht wie ein echter Browser aussehen, werden mit einem Ratenlimit, einer Herausforderungsseite oder einer vollständigen Sperre konfrontiert, bevor Sie die Produkte erreichen. Ein funktionierender Best Buy-Scraper braucht also zwei Dinge in einer Anfrage: einen Browser, der die Seite rendert, und eine IP, die Best Buy als echten Käufer erkennt. Sie können das selbst mit einem Headless-Browser und einem Pool von rotierenden Residential-Proxys aufbauen, aber die Aufrechterhaltung dieses Stacks ist der größte Teil der Arbeit. Die Crawling API bündelt beides in einem einzigen Aufruf: Sie senden die Such-URL, sie rendert die Seite hinter einer vertrauenswürdigen Residential-IP, übernimmt die Rotation und CAPTCHA-Lösung und gibt fertiges HTML zum Parsen zurück.
Voraussetzungen
Sie benötigen einige Dinge, bevor Sie mit dem Programmieren beginnen. Keines davon dauert lange.
Grundlegende Python-Kenntnisse. Sie sollten in der Lage sein, ein Python-Skript zu schreiben und auszuführen sowie Pakete mit pip zu installieren. Wenn Sie neu in der Sprache sind, decken die offiziellen Python-Docs oder jeder Einsteigerkurs das Niveau ab, das dieses Tutorial voraussetzt.
Python 3.8 oder neuer. Bestätigen Sie Ihre Version mit python --version (oder python3 --version). Falls nicht installiert, installieren Sie es von python.org und stellen Sie sicher, dass Python in Ihrem System-PATH ist.
Ein Crawlbase-Konto und Token. Registrieren Sie sich für ein kostenloses Konto, öffnen Sie Ihr Dashboard und kopieren Sie Ihr Token von der Kontodokumentationsseite. Der Free-Tier umfasst bis zu 20.000 Anfragen ohne Kreditkarte, was ausreicht, um diesen Scraper zu bauen und zu testen. Best Buy ist eine JavaScript-gerenderte Website, daher verwenden Sie hier das JavaScript-Anfrage-Token. Behandeln Sie das Token wie ein Passwort und halten Sie es aus der Versionskontrolle heraus.
Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die Bibliotheken, die der Scraper benötigt. crawlbase ist der offizielle Client für die Crawling API, und beautifulsoup4 parst das zurückgegebene HTML, sodass Sie jedes Feld aus den Eintrags-Karten per CSS-Selektor extrahieren können.
python --version python -m venv bestbuy_env source bestbuy_env/bin/activate pip install crawlbase beautifulsoup4
Unter Windows aktivieren Sie die Umgebung mit bestbuy_env\Scripts\activate statt der source-Zeile. Erstellen Sie mit beiden installierten Bibliotheken die Skriptdatei, die der Rest der Anleitung aufbaut:
touch bestbuy_scraper.py
Die Best Buy-Suchseite verstehen
Eine Best Buy-Suche befindet sich unter einer stabilen URL am searchpage.jsp-Endpunkt, mit Ihrer Anfrage im st-Parameter. Eine Suche nach "i phone" ist https://www.bestbuy.com/site/searchpage.jsp?st=i+phone. Die Seite zeigt eine geordnete Liste von Produktkarten, eine pro Artikel, jede mit denselben Feldern: einem Titel, einem Preis, einer Modell- und SKU-Nummer, einer Sternebewertung mit Bewertungsanzahl und einem Verfügbarkeitsstatus.
Bevor Sie Selektoren schreiben, öffnen Sie eine Suchseite in Ihrem Browser, klicken Sie mit der rechten Maustaste auf eine Produktkarte und wählen Sie Inspizieren. Best Buy umschließt das gesamte Ergebnis in einem ol.sku-item-list und jedes Produkt in einem li.sku-item-Container, dann teilt jede Karte in eine column-middle (Titel, Modell, SKU, Bewertung) und eine column-right (Preis, Verfügbarkeit) auf. Das sind die Elemente, die Sie anvisieren. Best Buys Klassennamen ändern sich im Laufe der Zeit, also behandeln Sie die untenstehenden Selektoren als eine Ausgangssvorlage, die Sie gegen die Live-Seite erneut prüfen, nicht als dauerhafte Vereinbarung.
Schritt 1: Die gerenderte Suchseite abrufen
Beginnen Sie damit, die fertige Seite zu erhalten. Importieren Sie die CrawlingAPI-Klasse, initialisieren Sie sie mit Ihrem Token, bauen Sie die Such-URL und fordern Sie sie an. Das Überprüfen von Crawlbases cb_status (legacy pc_status) vor dem Parsen hält Fehler sichtbar statt still.
from crawlbase import CrawlingAPI from urllib.parse import quote_plus api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 5000} response = api.get(page_url, options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Request failed. Crawlbase status: {response['headers']['cb_status']}") return None if __name__ == "__main__": search_term = "i phone" search_url = f"https://www.bestbuy.com/site/searchpage.jsp?st={quote_plus(search_term)}" html = crawl(search_url) print(html[:500] if html else "No HTML returned")
Die beiden Warteoptionen sind wichtig für eine Liste, die sich nach dem Laden füllt. ajax_wait weist die API an, auf den Abschluss des asynchronen Produktrasters zu warten, und page_wait wartet nach dem Laden eine feste Anzahl von 5.000 Millisekunden, damit die spät rendernden Karten erscheinen, bevor die Seite erfasst wird. Crawlbase gibt den Upstream-Erfolgscode im cb_status-Header zurück, also prüfen Sie den statt eines Top-Level-Statusfelds. Führen Sie das Skript aus und Sie sollten echtes Produkt-Markup sehen, keine Challenge-Page-Hülle. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.
Best Buy füllt sein Suchraster mit JavaScript und blockiert Datenverkehr, der nicht wie ein Browser aussieht, was genau der Grund ist, warum die obige rohe Anfrage leer zurückkommt. Die Crawling API nimmt Ihr Token, führt die Suchseite in einem echten Browser mit ajax_wait und page_wait aus, damit die Karten fertig geladen sind, rotiert serverseitig durch Residential-IPs und übernimmt die CAPTCHA-Lösung, dann liefert Ihnen fertiges HTML. Sie müssen keinen Headless-Browser-Pool und keinen Proxy-Pool selbst betreiben. Beginnen Sie mit dem kostenlosen Tier mit bis zu 20.000 Anfragen.
Schritt 2: Die Produktkarten mit BeautifulSoup parsen
Mit gerendertem HTML in der Hand laden Sie es in BeautifulSoup, finden jede Produktkarte und extrahieren jedes Feld durch seinen Selektor. Best Buy listet jeden Artikel als li.sku-item innerhalb des ol.sku-item-list, mit dem Titel und der Bewertung in column-middle und dem Preis und der Verfügbarkeit in column-right. Umhüllen Sie jede Karte in einem try/except, damit ein fehlerhafter Eintrag nicht den gesamten Lauf abstürzen lässt.
from bs4 import BeautifulSoup BASE = "https://www.bestbuy.com" def text_of(card, selector): el = card.select_one(selector) return el.get_text(strip=True) if el else None def parse_card(card): title_el = card.select_one("div.column-middle h4.sku-title > a") href = title_el["href"] if title_el and title_el.has_attr("href") else None return { "title": title_el.get_text(strip=True) if title_el else None, "price": text_of(card, 'div.column-right div.sku-list-item-price div[data-testid="customer-price"] > span'), "model": text_of(card, "div.column-middle div.sku-model span.sku-value"), "sku": card.get("data-sku-id"), "rating": text_of(card, "div.column-middle div.ratings-reviews div.c-ratings-reviews > p"), "review_count": text_of(card, "div.column-middle div.ratings-reviews span.c-reviews"), "availability": text_of(card, "div.column-right div.fulfillment-add-to-cart-button button"), "product_url": BASE + href if href else None, } def scrape_bestbuy_listing(html): soup = BeautifulSoup(html, "html.parser") cards = soup.select("ol.sku-item-list li.sku-item") results = [] for card in cards: try: results.append(parse_card(card)) except Exception as e: print(f"Skipped a card: {e}") return results
Der text_of-Helfer fragt ein Element innerhalb einer Karte ab und gibt None zurück, wenn es fehlt, statt bei einem .get_text()-Aufruf gegen nichts zu werfen. Das macht die Extraktion resistent, wenn ein Feld fehlt, was häufig vorkommt, da nicht jeder Eintrag einen Preis oder eine Bewertung anzeigt. Der Titel und der Produktlink kommen beide aus dem h4.sku-title > a-Anker, der Preis aus dem customer-price-Test-ID-Span und die SKU aus dem eigenen data-sku-id-Attribut der Karte. Die Verfügbarkeit wird aus dem Text des Fulfillment-Buttons gelesen, der "Add to Cart" für einen vorrätigen Artikel liest und "Sold Out" oder "Coming Soon" sonst, sodass der Button-Text als Lager-Signal dient.
Best Buys Klassennamen und data-testid-Werte ändern sich ohne Vorankündigung. Die strukturellen Marker wie ol.sku-item-list, li.sku-item und die column-middle/column-right-Aufteilung neigen dazu, dauerhafter zu sein als tiefe Klassenketten. Wenn ein Feld für jede Karte None zurückgibt, untersuchen Sie erneut die Live-Suchseite mit den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Periodische Selektor-Wartung ist bei jedem Produktions-Scraper normal.
Schritt 3: Das Skript zusammenbauen und JSON und CSV exportieren
Verbinden Sie nun den Abruf und das Parsen zu einem ausführbaren Skript, dann schreiben Sie die Datensätze sowohl als JSON als auch als CSV auf die Festplatte, damit Sie sie in ein Notebook oder eine Tabellenkalkulation laden können. Rufen Sie die gerenderte Suchseite ab, übergeben Sie sie an den Parser und geben Sie die strukturierten Zeilen aus.
import csv import json from urllib.parse import quote_plus from crawlbase import CrawlingAPI from bs4 import BeautifulSoup api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) BASE = "https://www.bestbuy.com" FIELDS = ["title", "price", "model", "sku", "rating", "review_count", "availability", "product_url"] def crawl(page_url): options = {"ajax_wait": "true", "page_wait": 5000} response = api.get(page_url, options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Request failed. Crawlbase status: {response['headers']['cb_status']}") return None def text_of(card, selector): el = card.select_one(selector) return el.get_text(strip=True) if el else None def parse_card(card): title_el = card.select_one("div.column-middle h4.sku-title > a") href = title_el["href"] if title_el and title_el.has_attr("href") else None return { "title": title_el.get_text(strip=True) if title_el else None, "price": text_of(card, 'div.column-right div.sku-list-item-price div[data-testid="customer-price"] > span'), "model": text_of(card, "div.column-middle div.sku-model span.sku-value"), "sku": card.get("data-sku-id"), "rating": text_of(card, "div.column-middle div.ratings-reviews div.c-ratings-reviews > p"), "review_count": text_of(card, "div.column-middle div.ratings-reviews span.c-reviews"), "availability": text_of(card, "div.column-right div.fulfillment-add-to-cart-button button"), "product_url": BASE + href if href else None, } def scrape_bestbuy_listing(html): soup = BeautifulSoup(html, "html.parser") cards = soup.select("ol.sku-item-list li.sku-item") results = [] for card in cards: try: results.append(parse_card(card)) except Exception as e: print(f"Skipped a card: {e}") return results def export(rows, name="bestbuy_products"): with open(f"{name}.json", "w", encoding="utf-8") as f: json.dump(rows, f, indent=2, ensure_ascii=False) with open(f"{name}.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=FIELDS) writer.writeheader() writer.writerows(rows) print(f"Saved {len(rows)} products to {name}.json and {name}.csv") def main(): search_term = "i phone" url = f"{BASE}/site/searchpage.jsp?st={quote_plus(search_term)}" html = crawl(url) if not html: return rows = scrape_bestbuy_listing(html) export(rows) if __name__ == "__main__": main()
Führen Sie das vollständige Skript mit python bestbuy_scraper.py aus. Es ruft die gerenderte Suchseite ab, parst eine Zeile pro Produkt und schreibt sowohl bestbuy_products.json als auch bestbuy_products.csv. Die gemeinsame FIELDS-Liste hält die CSV-Spaltenreihenfolge mit den Dictionary-Schlüsseln in Einklang, sodass die beiden Exporte nie auseinanderdriften.
Wie die Ausgabe aussieht
Sie erhalten eine saubere Liste von Produktdatensätzen in Suchreihenfolge, bereit zum Schreiben nach JSON, CSV oder einer Datenbank.
[ { "title": "Apple - iPhone 14 128GB (Unlocked) - Midnight", "price": "$729.99", "model": "MPUA3LL/A", "sku": "6507555", "rating": "Rating 4.9 out of 5 stars with 155 reviews", "review_count": "(155)", "availability": "Add to Cart", "product_url": "https://www.bestbuy.com/site/apple-iphone-14-128gb-unlocked-midnight/6507555.p?skuId=6507555" }, { "title": "Apple - iPhone SE (3rd Generation) 64GB (Unlocked)", "price": "$429.99", "model": "MMX73LL/A", "sku": "6507470", "rating": "Rating 4.5 out of 5 stars with 111 reviews", "review_count": "(111)", "availability": "Add to Cart", "product_url": "https://www.bestbuy.com/site/apple-iphone-se-3rd-generation-64gb-unlocked/6507470.p?skuId=6507470" } ]
Paginierung über Ergebnisseiten hinweg
Eine Suchseite ist eine Demo; ein echter Forschungsauftrag läuft über das gesamte Ergebnis. Best Buy teilt Suchergebnisse über mehrere Seiten auf und verfolgt die aktuelle Seite mit dem cp-URL-Parameter: &cp=1 ist die erste Seite, &cp=2 die zweite und so weiter. Um einen vollständigen Datensatz zu sammeln, gehen Sie die Seiten der Reihe nach durch, stoppen Sie, wenn eine Seite keine Produkte zurückgibt, und passen Sie die Anfragen an, damit Sie Best Buy nicht in einer engen Schleife bombardieren.
import time def scrape_all_pages(search_term, max_pages=5): base_url = f"{BASE}/site/searchpage.jsp?st={quote_plus(search_term)}" all_rows = [] for page_number in range(1, max_pages + 1): page_url = f"{base_url}&cp={page_number}" html = crawl(page_url) if not html: break rows = scrape_bestbuy_listing(html) if not rows: print(f"No products on page {page_number}, stopping.") break all_rows.extend(rows) print(f"Page {page_number}: {len(rows)} products") time.sleep(2) return all_rows if __name__ == "__main__": rows = scrape_all_pages("i phone", max_pages=5) export(rows)
Der Leere-Ergebnis-Abbruch stoppt Sie früh, wenn eine Suche keine Seiten mehr hat, und das time.sleep(2) zwischen Anfragen passt den Lauf an, damit Sie nicht für Rapid-Fire-Datenverkehr markiert werden. Ersetzen Sie den Suchbegriff durch jede gewünschte Anfrage, richten Sie denselben Parser auf eine einzelne Produktseite statt auf eine Such-URL und Sie können dies in eine Preisverfolgungspipeline erweitern. Für das umfassendere Bild, wie Sie diese Art von Feed in ein Überwachungstool umwandeln, lesen Sie unsere Guides zum Web-Scraping für Preisintelligenz und zum Erstellen eines Preisvergleichstools.
Entsperrt bleiben
Selbst wenn das Rendering gehandhabt wird, beobachtet Best Buy Datenverkehr, der wie ein Scraper aussieht. Einige Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwierige kommerzielle Ziel.
- Passen Sie Ihre Anfragen an. Verteilen Sie Anfragen mit einer Verzögerung zwischen Seiten statt alles mit voller Geschwindigkeit zu crawlen. Planen Sie schwerere Jobs außerhalb der Stoßzeiten, um Best Buys Server zu entlasten.
- Verlassen Sie sich auf Rotation. Ein Pool von Residential-IPs verteilt Anfragen über viele reale Benutzeradressen, sodass keine einzelne ein Ratenlimit auslöst. Die Crawling API erledigt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, den Sie richtig hinbekommen müssen.
- Speichern Sie nur das, was Sie benötigen. Speichern Sie die Produktfelder, die Ihr Projekt verwendet, und verwerfen Sie den Rest. Überprüfen Sie Ihre Selektoren periodisch, damit der Scraper mit Markup-Änderungen Schritt hält.
Das umfassendere Playbook finden Sie in unserem Guide zum Scrapen von Websites ohne geblockt zu werden, und für mehr dazu, warum Rendering hier wichtig ist, lesen Sie unseren Guide zum Crawlen von JavaScript-Websites. Wenn Ihr Projekt in einem breiteren Einzelhandelskontext liegt, deckt der Überblick über E-Commerce-Web-Scraping die gemeinsamen Muster aller Shops wie Best Buy und Amazon-Produktdaten ab.
Ist es legal, Best Buy zu scrapen?
Ob das Scrapen von Best Buy erlaubt ist, hängt von Best Buys Allgemeinen Geschäftsbedingungen, Ihrer Jurisdiktion und dem Verwendungszweck der Daten ab. Best Buys Bedingungen setzen Grenzen für den automatisierten Zugriff, daher kann Scraping gegen diese Bedingungen verstoßen, unabhängig davon, wie sorgfältig Ihre Tools sind. Keiner der hier gezeigten Codes ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie Best Buys Allgemeine Geschäftsbedingungen und seine robots.txt, und behandeln Sie beide als Grenze für das, was Sie sammeln. Für kommerzielle oder wettbewerbliche Nutzung wird das rechtliche Bild komplexer, und die Beratung durch einen Rechtsexperten zu Ihrem konkreten Fall ist die vernünftige Entscheidung.
Einige Grundsätze, die es wert sind, einzuhalten. Sammeln Sie nur öffentliche Daten: die Produkttitel, Preise, Modelle, SKUs, Bewertungen und Verfügbarkeit, die jeder auf einer Best Buy-Such- oder Produktseite ohne Konto sehen kann. Halten Sie Ihr Anfragevolumen niedrig genug, dass Sie Best Buys Server nicht belasten, und vermeiden Sie persönliche Daten, einschließlich alles, was mit identifizierbaren Käufern, Bewertern oder Ladenmitarbeitern über das öffentlich Aufgeführte hinaus verknüpft ist. Wenn Sie planen, die Daten kommerziell wiederzuverwenden, holen Sie die Erlaubnis oder eine offizielle Vereinbarung ein, statt zu schweigen und Zustimmung anzunehmen.
Dieser Guide ist bewusst auf öffentliche Such- und Produktseiten beschränkt, weil das die Linie ist, die die Arbeit vertretbar macht. Er behandelt nichts hinter einem Login, keine Konto- oder Bestelldaten, keine persönlichen Informationen und keinen Versuch, die Authentifizierung oder ein CAPTCHA zu umgehen, das Sie nicht berechtigt sind zu passieren. Best Buy betreibt ein Affiliate- und Partnerprogramm mit offiziellen Produkt-Feeds für lizenzierte Nutzung, und das ist der richtige Weg, wenn Sie große Volumen, garantierte Struktur oder kommerzielle Rechte benötigen. Wenn Ihr Projekt mehr als öffentliche Katalogdaten benötigt, ist ein offizieller Feed oder eine Datenvereinbarung der richtige Weg, nicht ein ausgefeilterer Scraper.
Wichtigste Erkenntnisse
- Best Buy ist ein öffentlicher Elektronikversandkatalog. Seine Such- und Produktseiten zeigen Titel, Preis, Modell, SKU, Bewertung und Verfügbarkeit, weshalb sie für Preisverfolgung und Marktforschung nützlich sind.
-
Sie benötigen Rendering und eine vertrauenswürdige IP zusammen. Best Buy füllt sein Suchraster clientseitig und blockiert Bot-Datenverkehr, daher rendert die Crawling API die Seite hinter einer Residential-IP in einem Aufruf mit
ajax_waitundpage_wait. -
BeautifulSoup übernimmt die Extraktion. Schleife über
ol.sku-item-list li.sku-item-Karten und ordne jedes Feld seinem Selektor zu, und erwarte, dass diese Selektoren veralten, wenn sich Best Buys Markup ändert. -
Paginieren Sie mit dem
cp-Parameter. Gehen Sie Seiten mit&cp=Ndurch, stoppen Sie bei einer leeren Seite und passen Sie Anfragen mit einer kurzen Verzögerung zwischen Seiten an. - Bleiben Sie bei öffentlichen Daten. Respektieren Sie Best Buys Allgemeine Geschäftsbedingungen und robots.txt, bevorzugen Sie einen offiziellen Feed für lizenzierte oder Massendaten und berühren Sie niemals Konten, Bestellungen oder persönliche Informationen.
Häufig gestellte Fragen
Warum gibt eine einfache Anfrage bei Best Buy keine Produkte zurück?
Best Buy rendert sein Suchraster clientseitig, sodass ein einfaches requests.get() eine Hülle ohne Produktkarten zurückerhält, weshalb ein einfacher Parser eine leere Liste zurückgibt. Darüber hinaus fordert oder blockiert Best Buy Datenverkehr, der nicht wie ein echter Browser aussieht. Das Rendern der Seite über die Crawling API hinter einer vertrauenswürdigen IP löst beides, weshalb der Scraper hier seine Anfrage darüber mit den gesetzten ajax_wait- und page_wait-Optionen leitet.
Welche Felder kann ich von einem Best Buy-Eintrag scrapen?
Von jeder Suchergebnis-Karte können Sie den Produkttitel, den aktuellen Kundenpreis, die Hersteller-Modellnummer, Best Buys eigene SKU, die Sternebewertung und Bewertungsanzahl, einen Verfügbarkeitsstatus vom Fulfillment-Button und den Link zur Detailseite des Produkts lesen. Der Scraper in diesem Guide extrahiert all das in einen Datensatz pro Produkt und schreibt sie dann nach JSON und CSV.
Wie gehe ich mit der Paginierung bei Best Buy um?
Best Buy verfolgt die aktuelle Suchseite mit dem cp-URL-Parameter, also fordert &cp=2 die zweite Seite an und so weiter. Schleifen Sie über die Seitennummern, hängen Sie jedes Mal &cp=N an die Such-URL an und stoppen Sie, wenn eine Seite keine Produkte zurückgibt. Fügen Sie eine kurze Verzögerung zwischen Anfragen hinzu, damit Sie den Lauf anpassen statt Seiten hintereinander abzufeuern.
Wie handhabt die Crawling API Best Buys JavaScript-Inhalte?
Die Crawling API rendert die Seite in einem echten Browser, bevor sie zurückgegeben wird, und die ajax_wait- und page_wait-Optionen steuern, wie lange sie auf asynchrone Inhalte wartet. Das Setzen von ajax_wait auf true wartet darauf, dass das asynchrone Produktraster fertig ist, und page_wait wartet eine feste Anzahl von Millisekunden nach dem Laden, damit die spät rendernden Karten im zurückgegebenen HTML erscheinen.
Wie vermeide ich eine Blockierung beim Scrapen von Best Buy?
Halten Sie Ihre anfragende Rate pro IP niedrig, fügen Sie zwischen Seiten eine Verzögerung ein und leiten Sie durch rotierende Residential-IPs, damit keine einzelne Adresse ein Ratenlimit auslöst. Die Crawling API verwaltet die Rotation, einen vertrauenswürdigen IP-Pool und CAPTCHA-Handhabung für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist das der Teil, in den Sie investieren sollten. Beobachten Sie die cb_status-Werte und schalten Sie zurück, wenn Sie Herausforderungen sehen.
Kann ich Best Buy-Preisänderungen im Laufe der Zeit verfolgen?
Ja. Führen Sie den Scraper nach einem Zeitplan aus, stempeln Sie jeden Export mit dem Datum und speichern Sie die Snapshots. Der Vergleich aufeinanderfolgender Läufe zeigt, welche Produkte den Preis geändert haben oder in den oder aus dem Vorrat gewechselt sind, was die Basis für Preisüberwachung und Wettbewerbsanalyse ist. Derselbe Parser funktioniert auf einer einzelnen Produktseite, sodass Sie einen Tracker auf die genauen SKUs einschränken können, die Sie interessieren.
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.
