Noon ist eines der größten E-Commerce-Marktplätze im Nahen Osten und bedient Millionen von Käufern in den VAE, Saudi-Arabien und Ägypten. Der Katalog umfasst Elektronik, Mode, Beauty und Lebensmittel, und die Preise sowie Bewertungen auf den Suchergebnisseiten sind ein klares öffentliches Signal für jeden, der Wettbewerber beobachtet, eine Kategorie analysiert oder einen Preismonitor aufbaut. Die Daten stehen direkt auf jeder Suchseite zur Verfügung: Produkttitel, Preise, Sternebewertungen, Marken und ein Link zu jedem Artikel.
Diese Anleitung zeigt Ihnen, wie Sie Noon-Daten scrapen mit JavaScript und Node.js unter Verwendung von cheerio. Sie bauen einen kleinen, lauffähigen Scraper, der eine Noon-Suchliste über die Crawling API abruft, Titel, Preis, Bewertung, Marke und Link für jedes Produkt parst, die Paginierung über mehrere Ergebnisseiten verwaltet und das Ergebnis als JSON und CSV exportiert. Die gesamte Anleitung bleibt auf öffentliche Produktlistendaten beschränkt, und der Rechtsabschnitt am Ende ist kein Standardtext, also lesen Sie ihn, bevor Sie diesen Scraper auf echtes Volumen anwenden.
Was Sie bauen werden
Ein Node.js-Skript, das eine öffentliche Noon-Such-URL sowie eine Anfrage entgegennimmt, das gerenderte HTML über die Crawling API abruft und für jedes Produkt im Listing einen strukturierten Datensatz extrahiert. Wir verwenden den VAE-Shop und die Suchanfrage "smartphones" als laufendes Beispiel und extrahieren folgende Felder pro Artikel:
-
Title der Produktname, gelesen aus dem
data-qa="product-name"-Element. - Price der numerische Betrag auf der Karte, zum Beispiel "1.799".
- Currency die Währungsbezeichnung neben dem Betrag, wie "AED".
- Rating der Sternebewertungstext, wenn das Produkt Rezensionen hat.
- Brand die Markenbezeichnung, die über dem Produktnamen auf der Karte angezeigt wird.
- Link die absolute URL zur einzelnen Produktseite.
Warum eine einfache Anfrage bei Noon fehlschlägt
Wenn Sie eine Noon-Such-URL mit einem einfachen HTTP-Client anfordern, erhalten Sie selten das Produktraster zurück. Zwei Faktoren wirken gegen Sie. Erstens rendert Noon seine Listenelemente im Browser mit JavaScript, so dass die initiale HTML-Seite eine nahezu leere Hülle ist, bis die Skripte der Seite ausgeführt werden und die Produktdaten per AJAX geladen werden. Zweitens kennzeichnet Noon automatisierten Traffic: Datacenter-IPs und Anfragemuster, die nicht wie ein echter Browser aussehen, werden mit einem CAPTCHA herausgefordert, ratenlimitiert oder blockiert, bevor sie die gerenderten Listings überhaupt erreichen.
Ein funktionierender Noon-Scraper benötigt daher zwei Dinge in einer Anfrage: einen Browser, der die Seite tatsächlich rendert und auf den AJAX-Inhalt wartet, sowie eine IP, die die Plattform als echten Besucher liest. Sie können das selbst mit einem Headless-Browser plus einem Pool rotierender Residential-Proxies aufbauen, aber deren Zusammenstellung und Wartung ist der Großteil der Arbeit. Die Crawling API vereint beides in einem einzigen Aufruf: Sie senden die URL, sie rendert die Seite hinter einer vertrauenswürdigen IP, wartet auf den dynamischen Inhalt und gibt fertiges HTML zurück, das Sie mit cheerio parsen können.
Noon lädt seine Produktkarten asynchron, daher sind die wichtigsten Parameter ajax_wait und page_wait. Wenn Sie ajax_wait: 'true' setzen, weist die Crawling API die Anfrage an, zu warten, bis Hintergrundabrufe abgeschlossen sind, und page_wait fügt eine feste Verzögerung (in Millisekunden) hinzu, damit langsame Karten Zeit zum Rendern haben, bevor das HTML erfasst wird.
Voraussetzungen
Sie benötigen einige Dinge, bevor Sie Code schreiben. Keines davon nimmt viel Zeit in Anspruch.
Grundlegende JavaScript- und Node.js-Kenntnisse. Sie sollten sich damit auskennen, ein Node-Skript zu schreiben und auszuführen sowie Pakete mit npm zu installieren. Wenn Sie neu bei Node sind, bringen Sie die offiziellen Docs oder ein Einsteigerkurs auf das Niveau, das dieses Tutorial voraussetzt. Die Begleitanleitung zur Frage, wie man einen Web-Scraper mit Node.js baut, deckt die Grundlagen ab, falls Sie eine Auffrischung möchten.
Node.js 16 oder höher. Bestätigen Sie Ihre Version mit node --version. Falls nicht vorhanden, installieren Sie es von der Node.js-Website oder über einen Versionsmanager wie nvm.
Ein Crawlbase-Konto und Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihr Token von der Kontodokumentationsseite. Das kostenlose Kontingent gibt Ihnen bis zu 20.000 Anfragen ohne Kreditkarte. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, also halten Sie es aus der Versionskontrolle heraus.
Projekt einrichten
Erstellen Sie einen Projektordner, initialisieren Sie ihn und installieren Sie die beiden Bibliotheken, die der Scraper benötigt.
node --version mkdir noon-scraper && cd noon-scraper npm init -y npm install crawlbase cheerio
Zwei Abhängigkeiten erledigen die Arbeit: crawlbase ist der offizielle Node-Client für die Crawling API, und cheerio parst das zurückgegebene HTML mit einer jQuery-ähnlichen API, sodass Sie einzelne Felder per CSS-Selektor extrahieren können. Erstellen Sie eine Datei namens noon-scraper.js in diesem Ordner und fügen Sie den Code aus den folgenden Schritten hinzu.
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 und fordern Sie eine Noon-Such-URL mit den gesetzten AJAX-Wait-Optionen an. Durch die Überprüfung des Statuscodes vor dem Parsen bleiben Fehler sichtbar statt still.
const { CrawlingAPI } = require('crawlbase'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); function searchUrl(query, page) { return `https://www.noon.com/uae-en/search/?q=${query}&page=${page}`; } const options = { ajax_wait: 'true', page_wait: '5000' }; api .get(searchUrl('smartphones', 1), options) .then((response) => { if (response.statusCode === 200) { console.log(response.body.slice(0, 500)); } }) .catch((error) => console.error('API request error:', error));
Führen Sie das Skript mit node noon-scraper.js aus, und Sie sollten echtes Noon-Listing-Markup am Anfang des Body sehen, keine abgespeckte Hülle. Das bestätigt, dass das Rendering und das AJAX-Warten funktioniert haben, bevor Sie einen einzigen Selektor schreiben. Wenn Sie keine benutzerdefinierten Felder benötigen und lieber strukturiertes JSON zurückhaben möchten, ohne einen Parser zu schreiben, übergeben Sie autoparse: 'true' in den Optionen, und die API gibt geparste Daten direkt zurück.
Diese erste Anfrage hat gerade eine vollständig gerenderte Noon-Suchseite zurückgegeben, mit AJAX-Karten und allem, ohne einen Headless-Browser oder einen Proxy auf Ihrer Seite. Die Crawling API führt die Seite in einem echten Browser aus, wartet mit ajax_wait und page_wait auf den dynamischen Inhalt, rotiert serverseitig durch Residential-IPs und verarbeitet die CAPTCHAs, die Noon Scrapern entgegenwirft, sodass Sie fertiges HTML aus einem Aufruf erhalten. Richten Sie es auf die Smartphones-Suche im kostenlosen Kontingent aus.
Schritt 2: Jedes Produkt mit cheerio parsen
Mit fertigem HTML in der Hand laden Sie es in cheerio und gehen die Produktkarten durch. Noon legt jedes Suchergebnis in einem sich wiederholenden Container an, sodass Sie jede Karte auswählen und dann Titel, Preis, Währung, Bewertung, Marke und Link aus ihr herauslesen. Das defensive Lesen jedes Feldes verhindert, dass ein fehlender Wert den Lauf abbricht.
const cheerio = require('cheerio'); function extractProducts(html) { const $ = cheerio.load(html); const products = []; $('div.grid > span.productContainer').each((index, element) => { const card = $(element); const title = card .find('div[data-qa="product-name"]') .text() .trim(); const price = card.find('strong.amount').text().trim(); const currency = card.find('span.currency').text().trim(); const rating = card.find('div.dGLdNc').text().trim(); const brand = card.find('div[data-qa="product-brand"]').text().trim(); const href = card.find('a').attr('href'); const link = href ? new URL(href, 'https://www.noon.com').href : ''; if (title && price) { products.push({ title, price, currency, rating, brand, link }); } }); return products; }
Einige Details halten dies seitengenau. Der Titel kommt aus dem data-qa="product-name"-Element, der numerische Preis befindet sich in strong.amount, und die Währungsbezeichnung wird separat aus span.currency gelesen, damit "AED" nicht im Betrag landet. Der Bewertungstext befindet sich in div.dGLdNc und ist bei Produkten ohne Rezensionen leer, die Marke befindet sich im data-qa="product-brand"-Element, und der Link wird aus dem Anker-href der Karte gelesen und zu einer absoluten URL aufgelöst, damit er außerhalb der Seite funktioniert. Die Bedingung am Ende schiebt nur einen Datensatz, wenn sowohl ein Titel als auch ein Preis vorhanden sind, was Werbeplätze und leere Platzhalterkarten ausfiltert.
Noons gehashte Klassennamen (dGLdNc und ähnliche) werden durch den Build generiert und ändern sich ohne Vorankündigung. Behandeln Sie die obigen Selektoren als Startvorlage, nicht als Vertrag. Wenn ein Feld leer zurückkommt, überprüfen Sie die Live-Seite in den Entwicklerwerkzeugen Ihres Browsers und aktualisieren Sie den Selektor. Die stabilen data-qa-Attribute überdauern tendenziell die gehashten Klassen, also bevorzugen Sie diese, wenn die Seite eines anbietet. Periodische Selektor-Wartung ist für jeden Produktions-Scraper normal.
Schritt 3: Paginierung über Ergebnisseiten verwalten
Eine Suchseite ist eine Demo; ein echter Lauf geht durch den vollständigen Ergebnissatz. Noon paginiert seine Suche mit einem page-Abfrageparameter, also rufen Sie jede Seite der Reihe nach ab, parsen Sie sie mit der Funktion aus Schritt 2 und stoppen Sie, wenn eine Seite ohne Produkte zurückkommt. Diese Leerseiten-Prüfung verhindert eine Endlosschleife über das Ende der Ergebnisse hinaus.
async function fetchPage(query, page) { const options = { ajax_wait: 'true', page_wait: '5000' }; const response = await api.get(searchUrl(query, page), options); if (response.statusCode === 200) return response.body; console.error(`Failed to fetch page ${page}: ${response.statusCode}`); return null; } async function scrapeAllPages(query, maxPages) { const all = []; for (let page = 1; page <= maxPages; page++) { console.log(`Scraping page ${page}...`); const html = await fetchPage(query, page); if (!html) break; const products = extractProducts(html); if (products.length === 0) { console.log('No more results found. Stopping.'); break; } all.push(...products); } return all; }
Der fetchPage-Helfer umschließt eine einzelne Anfrage und gibt bei einem Nicht-200-Status null zurück, und scrapeAllPages schleift von Seite 1 bis zu maxPages und bricht frühzeitig ab, sobald eine Seite null Produkte liefert. Da jede Anfrage eine vollständige Seite rendert, ist es ein freundlicher Umgang, maxPages beim Testen gering zu halten: Jede JavaScript-gerenderte Anfrage kostet mehr Credits als eine einfache, also bestätigen Sie den Parser auf einer oder zwei Seiten, bevor Sie die Anzahl erhöhen.
Schritt 4: Das vollständige Skript mit JSON- und CSV-Export zusammensetzen
Verbinden Sie jetzt den Abruf, das Parsen und die Paginierung in einem lauffähigen Skript und schreiben Sie die Datensätze als JSON und CSV auf die Festplatte.
const fs = require('fs'); const { CrawlingAPI } = require('crawlbase'); const cheerio = require('cheerio'); const api = new CrawlingAPI({ token: 'YOUR_CRAWLBASE_TOKEN' }); function searchUrl(query, page) { return `https://www.noon.com/uae-en/search/?q=${query}&page=${page}`; } function extractProducts(html) { const $ = cheerio.load(html); const products = []; $('div.grid > span.productContainer').each((index, element) => { const card = $(element); const title = card.find('div[data-qa="product-name"]').text().trim(); const price = card.find('strong.amount').text().trim(); const currency = card.find('span.currency').text().trim(); const rating = card.find('div.dGLdNc').text().trim(); const brand = card.find('div[data-qa="product-brand"]').text().trim(); const href = card.find('a').attr('href'); const link = href ? new URL(href, 'https://www.noon.com').href : ''; if (title && price) { products.push({ title, price, currency, rating, brand, link }); } }); return products; } async function fetchPage(query, page) { const options = { ajax_wait: 'true', page_wait: '5000' }; const response = await api.get(searchUrl(query, page), options); if (response.statusCode === 200) return response.body; console.error(`Failed to fetch page ${page}: ${response.statusCode}`); return null; } async function scrapeAllPages(query, maxPages) { const all = []; for (let page = 1; page <= maxPages; page++) { console.log(`Scraping page ${page}...`); const html = await fetchPage(query, page); if (!html) break; const products = extractProducts(html); if (products.length === 0) break; all.push(...products); } return all; } function toCsv(rows) { const headers = ['title', 'price', 'currency', 'rating', 'brand', 'link']; const escape = (value) => `"${String(value).replace(/"/g, '""')}"`; const lines = [headers.join(',')]; for (const row of rows) { lines.push(headers.map((h) => escape(row[h])).join(',')); } return lines.join('\n'); } async function main() { const query = 'smartphones'; const maxPages = 3; const products = await scrapeAllPages(query, maxPages); if (products.length === 0) return; fs.writeFileSync('noon-products.json', JSON.stringify(products, null, 2)); fs.writeFileSync('noon-products.csv', toCsv(products)); console.log(`Saved ${products.length} products to JSON and CSV`); } main();
Führen Sie es mit node noon-scraper.js aus, und Sie erhalten zwei Dateien: noon-products.json mit den vollständigen strukturierten Datensätzen und noon-products.csv, die direkt in einer Tabellenkalkulation geöffnet werden kann. Der toCsv-Helfer setzt jedes Feld in Anführungszeichen und verdoppelt eingebettete Anführungszeichen, was hier wichtig ist, weil Produkttitel lang sind und häufig Kommas enthalten. Ändern Sie die query zu einem beliebigen Suchbegriff und erhöhen Sie maxPages, wenn Sie bereit für einen breiteren Abruf sind.
Wie die Ausgabe aussieht
Die JSON-Datei enthält ein Objekt pro Produkt in der Reihenfolge, in der Noon sie zurückgegeben hat, jeweils mit Titel, Preis, Währung, Bewertung, Marke und Link.
[ { "title": "Galaxy S25 AI Dual SIM Silver Shadow 12GB RAM 256GB 5G", "price": "3,199", "currency": "AED", "rating": "4.5", "brand": "Samsung", "link": "https://www.noon.com/uae-en/galaxy-s25-ai-dual-sim-silver-shadow-12gb-ram-256gb-5g/N70140511V/p/" }, { "title": "A78 5G Dual SIM Glowing Black 8GB RAM 256GB", "price": "899", "currency": "AED", "rating": "4.3", "brand": "OPPO", "link": "https://www.noon.com/uae-en/a78-5g-dual-sim-glowing-black-8gb-ram-256gb/N70115717V/p/" } ]
Die CSV spiegelt dieselben Zeilen mit einer Kopfzeile wider, sodass sie direkt in Excel, Google Sheets oder jede Datenpipeline geladen werden kann, die Trennzeichen-Dateien liest.
title,price,currency,rating,brand,link "Galaxy S25 AI Dual SIM Silver Shadow 12GB RAM 256GB 5G","3,199","AED","4.5","Samsung","https://www.noon.com/uae-en/galaxy-s25-ai-dual-sim-silver-shadow-12gb-ram-256gb-5g/N70140511V/p/" "A78 5G Dual SIM Glowing Black 8GB RAM 256GB","899","AED","4.3","OPPO","https://www.noon.com/uae-en/a78-5g-dual-sim-glowing-black-8gb-ram-256gb/N70115717V/p/"
Von hier aus fließen die Datensätze direkt in Preisverfolgung und Recherche. Für einen umfassenderen Blick darauf, wie Listingdaten in Entscheidungen umgewandelt werden, lesen Sie, wie man Web-Scraping für Preis-Intelligence nutzt, und die allgemeine Anleitung zu E-Commerce-Web-Scraping deckt die Muster ab, die für alle Marktplätze gelten.
Unblockiert bleiben
Selbst wenn das Rendering verwaltet wird, überwacht Noon Traffic, der nach Scrapern aussieht. Ein paar Gewohnheiten halten einen Lauf gesund, und sie gelten für jedes schwer zu scrapende kommerzielle Ziel.
- Drosseln Sie Ihre Anfragen. Führen Sie eine Verzögerung zwischen dem Abruf von Seiten ein, anstatt die Suche in einer engen Schleife zu bombardieren. Das Verteilen von Anfragen ist der wichtigste Faktor, um unter Noons Ratenlimits zu bleiben.
- Setzen Sie auf Rotation. Ein Pool von Residential-IPs verteilt Anfragen auf viele echte Nutzeradressen, sodass keine einzelne ein Limit oder ein CAPTCHA auslöst. Die Crawling API erledigt das für Sie; wenn Sie Ihren eigenen Stack aufbauen, ist dies der Teil, den Sie richtig hinbekommen müssen.
- Lesen Sie die Statuscodes. Ein Lauf, der beginnt, Herausforderungen oder Nicht-200-Antworten zurückzugeben, signalisiert Ihnen, dass die aktuelle Rate oder IP-Ebene nicht mehr ausreicht. Behandeln Sie das als Signal zum Zurückschalten, nicht als Rauschen, das ignoriert werden soll.
Da Noon clientseitig rendert, gilt derselbe Render-und-Parsen-Ansatz für andere dynamische Shops. Das umfassendere Playbook findet sich unter Scraping von Websites ohne Blockierung, und wenn Sie die zugrunde liegende Technik für sich alleine möchten, geht Crawlen von JavaScript-Websites tiefer in das Rendering ein.
Ist es legal, Noon zu scrapen?
Ob das Scrapen von Noon erlaubt ist, hängt von Noons Nutzungsbedingungen, Ihrer Gerichtsbarkeit und dem ab, was Sie mit den Daten tun. Noons Bedingungen schränken den automatisierten Zugang ein, sodass Scraping gegen diese Bedingungen verstoßen kann, unabhängig davon, wie sorgfältig Ihre Werkzeuge sind. Keiner der hier gezeigten Codes ändert das; er bringt nur den technischen Teil zum Laufen. Lesen Sie Noons Nutzungsbedingungen und seine robots.txt und behandeln Sie beides als Grenze für das, was Sie sammeln.
Einige Grundsätze, die es wert sind, sie einzuhalten. Sammeln Sie nur öffentliche Produktdaten: den Titel, Preis, Währung, Bewertung, Marke und Produktlink, den jeder auf einer Suchseite ohne Konto sehen kann. Respektieren Sie Noons angegebene Ratenerwartungen und halten Sie Ihr Anfragevolumen niedrig genug, damit Sie die Server nicht belasten. Vermeiden Sie persönliche Daten, einschließlich alles, was mit identifizierbaren Rezensenten verbunden ist, über den öffentlichen Rezensionstext und die auf der Seite angezeigten Sternenzählungen hinaus. Verbreiten Sie keine urheberrechtlich geschützten Medien von Noon, wie Produktfotografie, als wären sie Ihre eigenen. Wenn Sie die Daten kommerziell wiederverwenden möchten, holen Sie die Genehmigung oder ein offizielles Abkommen ein, anstatt Schweigen als Zustimmung zu interpretieren.
Diese Anleitung beschränkt sich absichtlich auf öffentliche Such- und Listingdaten, weil das die Grenze ist, die die Arbeit vertretbar hält. Sie deckt nichts hinter einem Login ab, keine Kunden- oder Verkäufer-Personendaten, keine Bestellhistorie und keinen Versuch, eine Authentifizierung oder ein CAPTCHA zu umgehen, das Sie nicht passieren sollten. Wenn Noon oder einer seiner Partner einen sanktionierten Datenfeed oder eine offizielle API für Ihren Anwendungsfall anbietet, ist das das richtige Werkzeug, wenn Sie große Mengen, garantierte Struktur oder kommerzielle Rechte benötigen. Wenn Ihr Projekt mehr als öffentliche Listings erfordert, ist ein offizielles Abkommen der richtige Weg, kein ausgefeilterer Scraper.
Wichtigste Erkenntnisse
- Noon rendert Listings clientseitig und blockiert stark. Eine einfache Anfrage gibt eine leere Hülle oder ein CAPTCHA zurück, also müssen Sie die Seite rendern und auf ihren AJAX-Inhalt warten, hinter einer vertrauenswürdigen IP, bevor Sie sie parsen.
-
Die Crawling API erledigt es in einem Aufruf. Übergeben Sie
ajax_wait: 'true'undpage_wait, damit die dynamischen Karten geladen werden, und die API rotiert Residential-IPs und verarbeitet CAPTCHAs serverseitig; fügen Sieautoparse: 'true'hinzu, wenn Sie JSON statt rohem HTML möchten. -
cheerio extrahiert die Felder. Wählen Sie jede
span.productContainer, dann lesen Sie Titel, Preis, Währung, Bewertung, Marke und Link, und bevorzugen Sie die stabilendata-qa-Attribute, da die gehashten Klassennamen sich ändern. -
Paginierung ist ein Seitenparameter. Schleifen Sie den
page-Abfragewert und stoppen Sie, wenn eine Seite null Produkte zurückgibt, und halten SiemaxPagesbeim Testen gering, weil jede gerenderte Anfrage mehr Credits kostet. - Bleiben Sie bei öffentlichen Daten. Respektieren Sie Noons Nutzungsbedingungen und robots.txt, drosseln Sie Ihre Anfragen, vermeiden Sie persönliche Daten und durch Login gesperrte Inhalte, und bevorzugen Sie einen offiziellen Feed für Volumen oder kommerzielle Nutzung.
Häufig gestellte Fragen
Welche Daten kann ich von einer Noon-Suchseite scrapen?
Die öffentlichen Felder auf jeder Suchkarte: der Produkttitel, der numerische Preis, die Währung, die Sternebewertung wenn der Artikel Rezensionen hat, die Marke und der Link zur Produktseite. Diese Anleitung liest genau diese Felder aus jeder span.productContainer im Raster. Alles hinter einem Login, wie Kontodetails oder Bestellhistorie, liegt außerhalb des Geltungsbereichs und ist keine öffentlichen Daten.
Warum gibt eine einfache Anfrage unvollständige Daten von Noon zurück?
Weil Noon sein Produktraster clientseitig mit JavaScript rendert und die Karten per AJAX lädt, dann automatisierten Traffic mit CAPTCHAs herausfordert. Eine rohe HTTP-Anfrage von einer Datacenter-IP gibt normalerweise eine leere Hülle oder eine Blockierseite anstatt der Produktkarten zurück. Um eine vollständige Seite zu erhalten, müssen Sie sie rendern, auf den AJAX-Inhalt warten und sie hinter einer vertrauenswürdigen IP anfordern, was die Crawling API für Sie übernimmt.
Was machen ajax_wait und page_wait?
Sie steuern, wie lange die Crawling API wartet, bevor sie das HTML erfasst. Das Setzen von ajax_wait: 'true' hält die Anfrage an, bis Hintergrundabrufe abgeschlossen sind, und page_wait fügt eine feste Verzögerung in Millisekunden hinzu, damit langsam ladende Karten Zeit zum Rendern haben. Beide sind bei Noon wichtig, weil die Produktdaten nach dem initialen Seitenladen ankommen, nicht in der ersten Antwort.
Wie gehe ich mit der Paginierung bei Noon um?
Noon paginiert seine Suche mit einem page-Abfrageparameter, also erhöhen Sie ihn und rufen Sie jede Seite der Reihe nach ab. Die scrapeAllPages-Funktion in dieser Anleitung schleift von Seite 1 bis zu einem maxPages-Limit und stoppt, sobald eine Seite null Produkte zurückgibt, was erkennt, wann die Ergebnisse enden, ohne die Seitenanzahl im Voraus zu erraten.
Meine Selektoren geben leere Werte zurück. Was hat sich geändert?
Höchstwahrscheinlich Noons Markup. Gehashte Klassennamen wie dGLdNc werden durch den Build generiert und ändern sich ohne Vorankündigung, sodass Selektoren, die letzten Monat funktionierten, jetzt brechen können. Überprüfen Sie eine Live-Seite in den Entwicklerwerkzeugen Ihres Browsers und aktualisieren Sie den Selektor, und bevorzugen Sie die stabilen data-qa-Attribute, wenn die Seite eines anbietet. Periodische Selektor-Wartung ist für jeden Produktions-Scraper normal.
Kann ich Kunden-Personendaten von Noon scrapen?
Nein, und diese Anleitung deckt das nicht ab. Kundenkontodaten, Bestellhistorie und alles hinter einem Login sind keine öffentlichen Daten. Das Scrapen von durch Login gesperrten Inhalten, Personendaten zu Rezensenten über den öffentlichen Rezensionstext hinaus oder das Umgehen von Authentifizierung liegt außerhalb des Geltungsbereichs hier und verstößt gegen Noons Bedingungen. Für sanktionierten Zugang in großem Umfang ist ein offizielles Datenabkommen der richtige Weg.
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.
