Der ultimative Leitfaden zum Web Scraping mit Node.js.

Was ist Web Scraping überhaupt? Es geht darum, die mühsame Aufgabe des Sammelns von Informationen von Websites zu automatisieren.

Es gibt viele Anwendungsfälle für das Web-Scraping: Möglicherweise möchten Sie Preise von verschiedenen E-Commerce-Websites für eine Preisvergleichsseite erfassen. Oder Sie benötigen Flugzeiten und Hotel- / AirBNB-Angebote für eine Reiseseite. Vielleicht möchten Sie E-Mails aus verschiedenen Verzeichnissen für Vertriebsleads sammeln oder Daten aus dem Internet verwenden, um maschinelles Lernen / KI-Modelle zu trainieren. Oder Sie möchten sogar eine Suchmaschine wie Google erstellen!

Der Einstieg in das Web-Scraping ist einfach und der Prozess kann in zwei Hauptteile unterteilt werden:

  • Erfassen der Daten mithilfe einer HTML-Anforderungsbibliothek oder eines Headless-Browsers,
  • und Analysieren der Daten, um genau die gewünschten Informationen zu erhalten.

Diese Anleitung führt Sie durch den Prozess mit dem beliebten Node.js-Modul für Anforderungsversprechen, CheerioJS und Puppeteer. Anhand der Beispiele in diesem Handbuch lernen Sie alle Tipps und Tricks, die Sie benötigen, um ein Profi beim Sammeln von Daten zu werden, die Sie mit Node.js benötigen!

Wir werden eine Liste aller Namen und Geburtstage von US-Präsidenten aus Wikipedia sowie die Titel aller Beiträge auf der Titelseite von Reddit zusammenstellen.

Das Wichtigste zuerst: Lassen Sie uns die Bibliotheken installieren, die wir in diesem Handbuch verwenden werden (die Installation von Puppeteer dauert eine Weile, da auch Chromium heruntergeladen werden muss).

Machen Sie Ihre erste Anfrage

Als nächstes öffnen wir eine neue Textdatei (benennen Sie die Datei potusScraper.js) und schreiben eine Schnellfunktion, um den HTML-Code der Wikipedia-Seite „Liste der Präsidenten“ abzurufen.

Ausgabe:

Verwenden von Chrome DevTools

Cool, wir haben den rohen HTML-Code von der Webseite! Aber jetzt müssen wir diesen riesigen Textklumpen verstehen. Dazu müssen wir Chrome DevTools verwenden, damit wir den HTML-Code einer Webseite problemlos durchsuchen können.

Die Verwendung von Chrome DevTools ist einfach: Öffnen Sie einfach Google Chrome und klicken Sie mit der rechten Maustaste auf das Element, das Sie entfernen möchten (in diesem Fall klicke ich mit der rechten Maustaste auf George Washington, da wir Links zu allen Wikipedia-Seiten der einzelnen Präsidenten erhalten möchten). ::

Klicken Sie jetzt einfach auf "Überprüfen". Chrome ruft den DevTools-Bereich auf, in dem Sie den Quell-HTML-Code der Seite problemlos überprüfen können.

HTML mit Cheerio.js analysieren

Genial, Chrome DevTools zeigt uns jetzt genau das Muster, nach dem wir im Code suchen sollten (ein „großes“ Tag mit einem darin enthaltenen Hyperlink). Verwenden wir Cheerio.js, um den zuvor erhaltenen HTML-Code zu analysieren und eine Liste mit Links zu den einzelnen Wikipedia-Seiten der US-Präsidenten zurückzugeben.

Ausgabe:

Wir überprüfen, ob genau 45 Elemente zurückgegeben werden (die Anzahl der US-Präsidenten), was bedeutet, dass an keiner anderen Stelle auf der Seite zusätzliche versteckte „große“ Tags vorhanden sind. Jetzt können wir eine Liste mit Links zu allen 45 Wikipedia-Seiten des Präsidenten abrufen, indem wir sie aus dem Abschnitt "Attribute" jedes Elements abrufen.

Ausgabe:

Jetzt haben wir eine Liste aller 45 Wikipedia-Seiten des Präsidenten. Erstellen wir eine neue Datei (potusParse.js), die eine Funktion enthält, mit der Sie eine Wikipedia-Seite des Präsidenten aufrufen und den Namen und den Geburtstag des Präsidenten zurückgeben können. Lassen Sie uns zuerst den rohen HTML-Code von George Washingtons Wikipedia-Seite herunterladen.

Ausgabe:

Verwenden wir noch einmal Chrome DevTools, um die Syntax des Codes zu ermitteln, den wir analysieren möchten, damit wir den Namen und den Geburtstag mit Cheerio.js extrahieren können.

Wir sehen also, dass der Name in einer Klasse namens "firstHeading" und der Geburtstag in einer Klasse namens "bday" ist. Lassen Sie uns unseren Code so ändern, dass Cheerio.js zum Extrahieren dieser beiden Klassen verwendet wird.

Ausgabe:

Alles zusammenfügen

Perfekt! Lassen Sie uns dies nun in eine Funktion einpacken und aus diesem Modul exportieren.

Kehren wir nun zu unserer Originaldatei potusScraper.js zurück und benötigen das Modul potusParse.js. Wir werden es dann auf die Liste der zuvor gesammelten WikiUrls anwenden.

Ausgabe:

Rendern von JavaScript-Seiten

Voilà! Eine Liste der Namen und Geburtstage aller 45 US-Präsidenten. Wenn Sie nur das Request-Promise-Modul und Cheerio.js verwenden, können Sie die überwiegende Mehrheit der Websites im Internet durchsuchen.

In letzter Zeit verwenden jedoch viele Websites JavaScript, um dynamische Inhalte auf ihren Websites zu generieren. Dies verursacht ein Problem für Anforderungsversprechen und andere ähnliche HTTP-Anforderungsbibliotheken (wie Axios und Fetch), da sie nur die Antwort von der ersten Anforderung erhalten, das JavaScript jedoch nicht wie ein Webbrowser ausführen können.

Um Websites zu entfernen, für die JavaScript ausgeführt werden muss, benötigen wir eine andere Lösung. In unserem nächsten Beispiel erhalten wir die Titel für alle Beiträge auf der Startseite von Reddit. Mal sehen, was passiert, wenn wir versuchen, das Anforderungsversprechen wie im vorherigen Beispiel zu verwenden.

Ausgabe:

So sieht die Ausgabe aus:

Hmmm ... nicht ganz das, was wir wollen. Das liegt daran, dass Sie zum Abrufen des eigentlichen Inhalts das JavaScript auf der Seite ausführen müssen! Mit Puppenspieler ist das kein Problem.

Puppeteer ist ein äußerst beliebtes neues Modul, das Ihnen vom Google Chrome-Team zur Verfügung gestellt wurde und mit dem Sie einen kopflosen Browser steuern können. Dies ist ideal zum programmgesteuerten Scraping von Seiten, für die JavaScript ausgeführt werden muss. Lassen Sie uns den HTML-Code von der Startseite von Reddit mit Puppeteer anstelle von Request-Promise abrufen.

Ausgabe:

Nett! Die Seite ist mit dem richtigen Inhalt gefüllt!

Jetzt können wir Chrome DevTools wie im vorherigen Beispiel verwenden.

Es sieht so aus, als würde Reddit die Titel in "h2" -Tags einfügen. Verwenden wir Cheerio.js, um die h2-Tags von der Seite zu extrahieren.

Ausgabe:

Zusätzliche Ressourcen

Und da ist die Liste! An diesem Punkt sollten Sie sich wohl fühlen, wenn Sie Ihren ersten Web-Scraper schreiben, um Daten von einer Website zu sammeln. Hier sind einige zusätzliche Ressourcen, die Sie während Ihrer Web-Scraping-Reise möglicherweise hilfreich finden:

  • Liste der Web-Scraping-Proxy-Dienste
  • Liste der praktischen Web-Scraping-Tools
  • Liste der Web-Scraping-Tipps
  • Vergleich von Web-Scraping-Proxys
  • Cheerio-Dokumentation
  • Puppenspielerdokumentation