Cars and Bids veranstaltet öffentliche Fahrzeugauktionen, und jede Angebotsseite ist ein übersichtlicher Block strukturierter Informationen: Baujahr, Marke und Modell des Fahrzeugs, das aktuelle Höchstgebot, die verbleibende Zeit der Auktion, den Standort des Fahrzeugs und einen Link zur vollständigen Detailseite. Für alle, die den Markt für Enthusiastenfahrzeuge beobachten, ist dieses Raster live laufender Auktionen eines der saubersten öffentlichen Signale überhaupt. Deshalb beobachten Händler, Forscher und Analysten es auf Preistrends, Nachfrage und die gerade begehrten Modelle.
Diese Anleitung zeigt Ihnen, wie Sie Cars and Bids-Auktionsangebote mit Python scrapen. Sie erstellen einen kleinen, lauffähigen Scraper, der eine Angebotsseite über die Crawling API abruft, für jede Auktion einen sauberen Datensatz analysiert, die Paginierung verwaltet und die Ergebnisse in JSON und CSV exportiert. Die gesamte Anleitung beschränkt sich auf öffentliche Auktionsdaten: Titel, Gebote, verbleibende Zeit und Standorte, die jeder ohne Anmeldung auf einer Angebotsseite sehen kann.
Was Sie erstellen werden
Ein Python-Skript, das eine Cars and Bids-Angebots-URL entgegennimmt, die gerenderte Seite über die Crawling API abruft und für jede Auktionskarte einen strukturierten Datensatz extrahiert. Als laufendes Beispiel verwenden wir eine nach Marke gefilterte Suchseite, denselben Ansatz wie die frühere Anleitung, und lesen diese Felder aus jedem Angebot:
- Title die Auktionsüberschrift mit Baujahr, Marke und Modell des Fahrzeugs.
- Subtitle die kurze Beschreibungszeile unter dem Titel (Ausstattungsvariante, besondere Optionen, Reservestatus).
- Current bid das höchste Gebot zum Zeitpunkt des Crawls.
- Time left die verbleibende Zeit bis zum Ende der Auktion.
- Location die Stadt und Region, in der das Fahrzeug angeboten wird.
- Link die URL zur Detailseite der Auktion.
Warum eine einfache Anfrage bei Cars and Bids scheitert
Wenn Sie einen einfachen HTTP-Client auf eine Cars and Bids-Angebots-URL richten, erhalten Sie selten die gewünschten Auktionen. Zwei Dinge sprechen dagegen. Erstens rendert das Angebotsgitter clientseitig: Die Seite liefert eine schlanke Hülle und fügt die Auktionskarten ein, sobald das JavaScript der Seite ausgeführt wird. Das anfängliche HTML, das Sie erhalten, ist oft ein leerer Rahmen ohne Angebote. Zweitens wird automatisierter Traffic schnell erkannt. Datacenter-IP-Bereiche und Anfragemuster, die nicht wie ein echter Browser aussehen, werden mit einer Überprüfung oder einer direkten Sperre beantwortet, bevor Sie die Auktionen überhaupt erreichen.
Ein funktionierender Cars and Bids-Scraper benötigt also zwei Dinge in einer einzigen Anfrage: einen Browser, der die Seite rendert, und eine IP, die die Seite als echten Besucher erkennt. Sie können das selbst mit einem Headless Browser und einem Pool von rotierenden Residential Proxies zusammenstellen, aber die Pflege dieses Stacks ist der Hauptaufwand. Die Crawling API kombiniert beides in einem einzigen Aufruf: Sie senden ihr die Angebots-URL, sie rendert die Seite hinter einer vertrauenswürdigen Residential-IP, übernimmt Rotation und CAPTCHA-Lösung und gibt Ihnen fertiges HTML zum Parsen zurück.
Voraussetzungen
Bevor Sie mit dem Schreiben von Code beginnen, müssen einige Dinge bereitstehen. Keines davon nimmt lange in Anspruch.
Python-Grundkenntnisse. Sie sollten in der Lage sein, ein Python-Skript zu schreiben, auszuführen und Pakete mit pip zu installieren. Falls Sie neu in der Sprache sind, decken die offizielle Python-Dokumentation oder ein Einsteigerkurs das für dieses Tutorial vorausgesetzte Niveau ab. Die Anleitung zum Scrapen einer Website mit Python ist ein sanfter Einstiegspunkt, falls Sie einen benötigen.
Python 3.8 oder neuer. Prüfen Sie Ihre Version mit python --version (oder python3 --version). Falls nicht vorhanden, installieren Sie es von python.org und stellen Sie sicher, dass Python in Ihrem System-PATH enthalten ist.
Ein Crawlbase-Konto und Token. Registrieren Sie sich für ein kostenloses Konto, öffnen Sie Ihr Dashboard und kopieren Sie Ihr Token. Da Cars and Bids JavaScript benötigt, um seine Auktionen zu laden, verwenden Sie das JavaScript (JS)-Token anstelle des normalen. Das kostenlose Kontingent umfasst bis zu 20.000 Anfragen ohne Kreditkarte, was mehr als ausreichend ist, um diesen Scraper zu erstellen und zu testen. Behandeln Sie das Token wie ein Passwort und halten Sie es aus der Versionsverwaltung heraus.
Das Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit die Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die zwei Bibliotheken, die der Scraper benötigt. crawlbase ist der offizielle Client für die Crawling API, und beautifulsoup4 analysiert das zurückgegebene HTML, sodass Sie jedes Feld aus den Auktionskarten per CSS-Selektor extrahieren können.
python --version python -m venv carsandbids-scraper source carsandbids-scraper/bin/activate pip install crawlbase beautifulsoup4
Unter Windows aktivieren Sie die Umgebung mit carsandbids-scraper\Scripts\activate anstelle der source-Zeile. Nachdem beide Bibliotheken installiert sind, erstellen Sie die Skriptdatei, die in der restlichen Anleitung aufgebaut wird:
touch carsandbids_scraper.py
Die Angebotsseite verstehen
Eine Cars and Bids-Suche befindet sich unter einer stabilen URL. Eine nach Marke gefilterte Liste ist beispielsweise https://carsandbids.com/search/bmw, und dasselbe Muster gilt für andere Marken. Die Seite zeigt ein Raster von Auktionskarten, eine pro Fahrzeug, und jede Karte enthält dieselben Felder: den Auktionstittel (Baujahr, Marke, Modell), einen Untertitel, ein Vorschaubild, das aktuelle Gebot, die verbleibende Zeit, den Standort und einen Link zur eigenen Auktionsseite.
Bevor Sie Selektoren schreiben, öffnen Sie eine Angebotsseite in Ihrem Browser, klicken Sie mit der rechten Maustaste auf eine Auktionskarte und wählen Sie Untersuchen. Jede Auktion befindet sich in einem li-Element mit der Klasse auction-item. Darin befindet sich der Titel in einem div.auction-title, der Untertitel in einem p.auction-subtitle, der Standort in einem p.auction-loc, das Vorschaubild in einem img und der Link im Anker der Karte. Das sind die Elemente, auf die Sie abzielen.
Schritt 1: Die gerenderte Angebotsseite abrufen
Beginnen Sie damit, die fertige Seite abzurufen. Importieren Sie die Klasse CrawlingAPI, initialisieren Sie sie mit Ihrem JS-Token, setzen Sie die Angebots-URL und fordern Sie sie an. Die Überprüfung des Statuscodes vor dem Parsen sorgt dafür, dass Fehler auffällig und nicht still auftreten.
from crawlbase import CrawlingAPI crawling_api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) def make_crawlbase_request(url, options): response = crawling_api.get(url, options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Failed to fetch the page. Crawlbase status: {response['headers']['cb_status']}") return None if __name__ == "__main__": listing_url = "https://carsandbids.com/search/bmw" options = {"ajax_wait": "true", "page_wait": 10000} html = make_crawlbase_request(listing_url, options) print(html[:500] if html else "No HTML returned")
Die zwei Optionen sind wichtig für ein Raster, das sich nach dem Laden füllt. ajax_wait weist die API an, auf das Ende asynchroner Inhalte zu warten, und page_wait hält für eine feste Anzahl von Millisekunden an (hier 10.000), sodass die spät gerenderten Auktionskarten erscheinen, bevor die Seite aufgezeichnet wird. Die Statusprüfung liest den cb_status (legacy pc_status)-Header, den die Crawling API zurückgibt, und ein Wert von 200 bedeutet, dass das Rendering erfolgreich war. Führen Sie das Skript aus und Sie sollten echtes Angebots-Markup sehen, keine leere Hülle. Das bestätigt, dass das Rendering funktioniert, bevor Sie einen einzigen Selektor schreiben.
Das Cars and Bids-Angebotsgitter erscheint erst, wenn JavaScript ausgeführt wurde, und ein Rendering allein reicht nicht aus, wenn die Anfrage von einer IP kommt, der die Seite nicht vertraut. Die Crawling API nimmt Ihr Token, führt die Seite in einem echten Browser mit den gerade gesetzten Optionen ajax_wait und page_wait aus, rotiert serverseitig durch Residential IPs, übernimmt die CAPTCHA-Lösung und gibt Ihnen fertiges HTML. Sie müssen keine eigene Headless-Browser-Flotte und keinen Proxy-Pool betreiben. Testen Sie es zuerst mit dem kostenlosen Kontingent von bis zu 20.000 Anfragen.
Schritt 2: Die Auktionskarten mit BeautifulSoup analysieren
Mit dem gerenderten HTML laden Sie es in BeautifulSoup, suchen jede Auktionskarte und lesen jedes Feld über seinen Selektor aus. Jede Karte ist ein li.auction-item; Titel, Untertitel, Standort, aktuelles Gebot, verbleibende Zeit, Vorschaubild und Link befinden sich alle darin. Das Absichern jeder Abfrage mit einer Präsenzprüfung macht die Extraktion robust, wenn ein Feld fehlt, was vorkommt, da nicht jede Karte dieselben Daten zeigt.
from bs4 import BeautifulSoup BASE = "https://www.carsandbids.com" def text_of(listing, tag, css_class): el = listing.find(tag, class_=css_class) return el.text.strip() if el else None def scrape_listing_page(html_content): soup = BeautifulSoup(html_content, "html.parser") car_listings = soup.find_all("li", class_="auction-item") extracted_data = [] for listing in car_listings: link_tag = listing.find("a") thumbnail = listing.find("img") extracted_data.append({ "title": text_of(listing, "div", "auction-title"), "sub_title": text_of(listing, "p", "auction-subtitle"), "current_bid": text_of(listing, "span", "bid-value"), "time_left": text_of(listing, "span", "td-time"), "location": text_of(listing, "p", "auction-loc"), "thumbnail": thumbnail["src"] if thumbnail else None, "link": BASE + link_tag["href"] if link_tag else None, }) return extracted_data
Der text_of-Helfer sucht ein Element innerhalb einer Karte und gibt None zurück, wenn es fehlt, anstatt bei einem .text-Aufruf auf nichts zu scheitern. Der Titel kommt aus div.auction-title und enthält Baujahr, Marke und Modell; der Untertitel aus p.auction-subtitle; der Standort aus p.auction-loc; das aktuelle Gebot aus dem Gebotsfeld-Span und die verbleibende Zeit aus dem Zeitanzeige-Span. Der Link wird durch Voranstellen des relativen href der Karte mit der Website-Basis erstellt, sodass Sie eine absolute URL speichern.
Website-Markup ändert sich ohne Vorankündigung, und die oben genannten Klassennamen der Auktionskarte sind eine Startvorlage, kein Vertrag. Der li.auction-item-Container und die Klassen auction-title / auction-subtitle / auction-loc sind die dauerhaften Anker; die Bid- und Time-Left-Spans werden am ehesten geändert. Wenn ein Feld für jede Karte als None zurückkommt, untersuchen Sie eine Live-Angebotsseite in den Dev-Tools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist bei jedem Produktions-Scraper normal.
Schritt 3: Das Skript zusammensetzen und JSON und CSV exportieren
Verbinden Sie jetzt das Abrufen und das Parsen in einem einzigen lauffähigen Skript und schreiben Sie die Datensätze sowohl in JSON als auch CSV, sodass Sie sie in ein Notebook oder eine Tabellenkalkulation laden können. Rufen Sie die gerenderte Angebotsseite ab, übergeben Sie sie an den Parser und geben Sie die strukturierten Zeilen aus.
import csv import json from crawlbase import CrawlingAPI from bs4 import BeautifulSoup crawling_api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) BASE = "https://www.carsandbids.com" FIELDS = ["title", "sub_title", "current_bid", "time_left", "location", "thumbnail", "link"] def make_crawlbase_request(url, options): response = crawling_api.get(url, options) if response["headers"]["cb_status"] == "200": return response["body"].decode("utf-8") print(f"Failed to fetch the page. Crawlbase status: {response['headers']['cb_status']}") return None def text_of(listing, tag, css_class): el = listing.find(tag, class_=css_class) return el.text.strip() if el else None def scrape_listing_page(html_content): soup = BeautifulSoup(html_content, "html.parser") car_listings = soup.find_all("li", class_="auction-item") extracted_data = [] for listing in car_listings: link_tag = listing.find("a") thumbnail = listing.find("img") extracted_data.append({ "title": text_of(listing, "div", "auction-title"), "sub_title": text_of(listing, "p", "auction-subtitle"), "current_bid": text_of(listing, "span", "bid-value"), "time_left": text_of(listing, "span", "td-time"), "location": text_of(listing, "p", "auction-loc"), "thumbnail": thumbnail["src"] if thumbnail else None, "link": BASE + link_tag["href"] if link_tag else None, }) return extracted_data def export(rows, name="carsandbids_listings"): 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)} auctions to {name}.json and {name}.csv") def main(): url = "https://carsandbids.com/search/bmw" options = {"ajax_wait": "true", "page_wait": 10000} html = make_crawlbase_request(url, options) if not html: return rows = scrape_listing_page(html) export(rows) if __name__ == "__main__": main()
Führen Sie das vollständige Skript mit python carsandbids_scraper.py aus. Es ruft die gerenderte Angebotsseite ab, analysiert eine Zeile pro Auktion und schreibt sowohl carsandbids_listings.json als auch carsandbids_listings.csv. Die gemeinsame Liste FIELDS hält die CSV-Spaltenreihenfolge mit den Dictionary-Schlüsseln synchron, sodass die beiden Exporte nie auseinanderlaufen.
So sieht die Ausgabe aus
Sie erhalten eine saubere Liste von Auktionsdatensätzen in Seitenreihenfolge, bereit zum Schreiben in JSON, CSV oder eine Datenbank.
[ { "title": "2014 BMW 335i Sedan", "sub_title": "No Reserve: Turbo 6-Cylinder, M Sport Package, California-Owned", "current_bid": "$9,500", "time_left": "2 days", "location": "Los Angeles, CA 90068", "thumbnail": "https://media.carsandbids.com/cdn-cgi/image/width=768/photos/rkVPlNqQ.jpg", "link": "https://www.carsandbids.com/auctions/9QxJ8nV7/2014-bmw-335i-sedan" }, { "title": "2009 BMW 328i Sports Wagon", "sub_title": "No Reserve: Inspected 3.0-Liter 6-Cylinder, Premium Package", "current_bid": "$12,750", "time_left": "5 hours", "location": "San Diego, CA 92120", "thumbnail": "https://media.carsandbids.com/cdn-cgi/image/width=768/photos/3g6kOmG9.jpg", "link": "https://www.carsandbids.com/auctions/30n7Yqaj/2009-bmw-328i-sports-wagon" } ]
Paginierung verwalten
Eine Suchseite ist ein Demo; ein echtes Rechercheprojekt läuft über alle Ergebnisseiten. Cars and Bids paginiert seine Suche mit einem ?page=-Parameter, sodass Sie die Seiten durch Erhöhen der Zahl durchlaufen können, bis eine Seite keine Auktionskarten mehr zurückgibt. Takten Sie die Anfragen mit einer kurzen Verzögerung, damit Sie die Seite nicht in einer engen Schleife belasten.
import time def scrape_all_pages(search_url, max_pages=10): options = {"ajax_wait": "true", "page_wait": 10000} all_rows = [] for page in range(1, max_pages + 1): page_url = f"{search_url}?page={page}" html = make_crawlbase_request(page_url, options) if not html: break found = scrape_listing_page(html) if not found: print(f"No auctions on page {page}; stopping.") break all_rows.extend(found) print(f"Page {page}: {len(found)} auctions") time.sleep(2) return all_rows
Der Abbruch bei leeren Ergebnissen stoppt Sie frühzeitig, wenn der Suche die Seiten ausgehen, und das time.sleep(2) zwischen den Anfragen taktet den Durchlauf, damit Sie nicht für schnellen Traffic markiert werden. Ersetzen Sie den einzelnen Abruf in main durch einen Aufruf von scrape_all_pages("https://carsandbids.com/search/bmw"), und der Rest der Pipeline (Parsen, Exportieren) trägt die kombinierte Liste direkt durch. Um eine Auktion im Laufe der Zeit zu verfolgen, führen Sie den Job nach einem Zeitplan aus und versehen Sie jeden Export mit dem Datum, dann vergleichen Sie aufeinanderfolgende Snapshots, um zu sehen, wie sich Gebote und verbleibende Zeit verändert haben.
Entsperrt bleiben
Auch mit gehandhabtem Rendering beobachtet die Seite Scraper-ähnlichen Traffic. Einige Gewohnheiten halten einen Durchlauf gesund, und sie gelten für jedes schwierige Ziel.
- Anfragen takten. Verteilen Sie Anfragen mit einer Verzögerung zwischen den Seiten, anstatt alles mit voller Geschwindigkeit zu crawlen, und planen Sie schwerere Jobs zu Nebenzeiten ein, um die Serverlast zu verringern.
- Auf Rotation setzen. Ein Pool von Residential IPs verteilt Anfragen auf viele echte Benutzeradressen, sodass keine einzelne ein Rate-Limit auslöst. Die Crawling API erledigt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist dies der Teil, den Sie richtig machen müssen.
- Nur das Benötigte behalten. Speichern Sie die Auktionsfelder, die Ihr Projekt benötigt, und verwerfen Sie den Rest. Überprüfen Sie Ihre Selektoren regelmäßig, damit der Scraper mit Markup-Änderungen Schritt hält.
Das umfassendere Handbuch zum Vermeiden von Blockierungen finden Sie unter So scrapen Sie Websites ohne Blockiert zu werden, und für weitere Informationen dazu, warum Rendering hier wichtig ist, empfiehlt sich So crawlen Sie JavaScript-Websites. Wenn Sie diese Daten für Preisstudien verwenden, erklärt die Anleitung Web Scraping für Preisintelligenz, wie Sie aus rohen Angeboten ein nutzbares Signal machen.
Ist es legal, Cars and Bids zu scrapen?
Ob das Scrapen von Cars and Bids erlaubt ist, hängt von den Nutzungsbedingungen der Website, Ihrer Gerichtsbarkeit und dem Verwendungszweck der Daten ab. Die Nutzungsbedingungen der Website regeln den automatisierten Zugriff, sodass das Scrapen unabhängig davon, wie sorgfältig Ihr Tooling ist, gegen diese Bedingungen verstoßen kann. Keiner der hier vorgestellten Code ändert das; er macht lediglich den technischen Teil funktionsfähig. Lesen Sie die Nutzungsbedingungen von Cars and Bids und seine robots.txt, und behandeln Sie beides als Grenze für das, was Sie sammeln. Für kommerzielle oder wettbewerbsorientierte Nutzung wird das rechtliche Bild komplizierter, und die Konsultation eines Rechtsexperten für Ihren spezifischen Fall ist ratsam.
Einige Grenzen, die es einzuhalten gilt. Sammeln Sie nur öffentliche Auktionsdaten: die Titel, Untertitel, aktuellen Gebote, verbleibende Zeit, Standorte und Angebotslinks, die jeder auf einer Suchseite ohne Konto sehen kann. Halten Sie Ihr Anfragevolumen niedrig genug, dass Sie die Server der Website nicht belasten, und vermeiden Sie personenbezogene Daten, einschließlich allem, was mit identifizierbaren Verkäufern, Bietern oder Kommentatoren in Verbindung steht, über das öffentlich aufgelistete hinaus. Verbreiten Sie die Angebotsfotos oder Beschreibungen nicht als Ihre eigenen weiter, da dieses Material urheberrechtlich geschützt ist.
Diese Anleitung ist bewusst auf öffentliche Angebotsseiten beschränkt, denn das ist die Grenze, die die Arbeit vertretbar hält. Sie behandelt nichts hinter einem Login, keine Konto- oder Gebotsdaten, keine personenbezogenen Informationen und keinen Versuch, die Authentifizierung oder ein CAPTCHA zu umgehen, zu dem Sie nicht berechtigt sind. Wenn Ihr Projekt mehr als öffentliche Angebotsdaten benötigt, ist der richtige Weg eine offizielle Datenvereinbarung mit der Website und kein clevererer Scraper.
Wichtigste Erkenntnisse
- Cars and Bids-Angebote sind ein Live-Auktionssignal. Jede Suchseite enthält den aktuellen Titel, das Gebot, die verbleibende Zeit und den Standort für jedes Fahrzeug, weshalb sie so nützlich für Marktforschung und Preisgestaltung ist.
-
Sie benötigen Rendering und eine vertrauenswürdige IP zusammen. Das Angebotsgitter lädt clientseitig und Bot-Traffic wird blockiert, sodass die Crawling API die Seite hinter einer Residential-IP in einem Aufruf mit gesetzten Optionen
ajax_waitundpage_waitrendert. -
BeautifulSoup erledigt die Extraktion. Iterieren Sie über
li.auction-item-Karten und ordnen Sie Titel, Untertitel, aktuelles Gebot, verbleibende Zeit, Standort und Link den aktuellen Selektoren zu; rechnen Sie damit, dass sich diese Selektoren ändern. -
Seiten durchlaufen und exportieren. Erhöhen Sie den
?page=-Parameter, bis eine Seite keine Karten mehr zurückgibt, und schreiben Sie dann die kombinierten Zeilen in JSON und CSV mit einer gemeinsamen Feldliste, um beide Dateien synchron zu halten. - Bei öffentlichen Daten bleiben. Respektieren Sie die Nutzungsbedingungen und robots.txt der Website, halten Sie das Anfragevolumen bescheiden und greifen Sie niemals auf Konten, Gebote, personenbezogene Daten oder urheberrechtlich geschützte Medien zu, die Sie weiterverbreiten würden.
Häufig gestellte Fragen
Warum gibt eine einfache Anfrage keine Auktionen von Cars and Bids zurück?
Das Angebotsgitter rendert clientseitig: Die Website liefert eine nahezu leere Hülle und fügt die Auktionskarten ein, sobald ihr JavaScript ausgeführt wird, sodass eine rohe Anfrage oft einen Rahmen ohne Angebote zurückgibt. Darüber hinaus fordert oder blockiert die Website Traffic, der nicht wie ein echter Browser aussieht. Das Rendern der Seite über die Crawling API hinter einer vertrauenswürdigen IP, mit gesetzten Optionen ajax_wait und page_wait, löst beides, weshalb der Scraper hier seine Anfrage darüber leitet.
Welches Crawlbase-Token sollte ich für Cars and Bids verwenden?
Verwenden Sie das JavaScript (JS)-Token. Cars and Bids lädt seine Auktionen dynamisch, benötigt also das Rendering, das das JS-Token ermöglicht; das normale Token gibt die nicht gerenderte Hülle zurück. Das kostenlose Kontingent umfasst bis zu 20.000 Anfragen ohne Kreditkarte, was ausreicht, um den Scraper zu erstellen und zu testen.
Wie scrape ich eine bestimmte Marke oder Suche auf Cars and Bids?
Richten Sie den Scraper auf die gewünschte Such-URL. Ein Markenfilter ist nur ein Pfad, zum Beispiel https://carsandbids.com/search/bmw für BMW, sodass das Austauschen der Marke am Ende der URL auf einen anderen Satz von Auktionen abzielt. Um die vollständigen Ergebnisse abzudecken, durchlaufen Sie den ?page=-Parameter, bis eine Seite keine Karten mehr zurückgibt.
Welche Felder kann ich aus einem Cars and Bids-Angebot extrahieren?
Aus jeder Auktionskarte können Sie den Titel (Baujahr, Marke, Modell), den Untertitel, das aktuelle Gebot, die verbleibende Zeit, den Standort, das Vorschaubild und den Link zur Detailseite der Auktion extrahieren. Der Parser ordnet jedem dieser Elemente seinen CSS-Selektor zu, und Sie können die nicht benötigten Felder aus dem Ausgabe-Dictionary entfernen.
Wie verwalte ich die Paginierung über viele Auktionen?
Cars and Bids paginiert seine Suche mit einem ?page=-Parameter. Erhöhen Sie die Seitenzahl, rufen Sie jede Seite ab und analysieren Sie sie, und brechen Sie ab, wenn eine Seite keine Auktionskarten zurückgibt. Fügen Sie zwischen den Anfragen eine kurze Verzögerung hinzu, damit Sie den Durchlauf takten, anstatt Seiten nacheinander abzufeuern, und sammeln Sie die Zeilen in einer Liste, bevor Sie exportieren.
Wie vermeide ich Blockierungen beim Scrapen von Cars and Bids?
Halten Sie Ihre Anfragerate pro IP niedrig, fügen Sie zwischen den Seiten eine Verzögerung hinzu und leiten Sie Anfragen über rotierende Residential IPs, damit keine einzelne Adresse ein Rate-Limit auslöst. Die Crawling API verwaltet Rotation, einen vertrauenswürdigen IP-Pool und CAPTCHA-Handling 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 verlangsamen Sie, wenn Sie beginnen, Herausforderungen zu sehen.
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.
