Eine Einführung in Web Scraping mit Node.js (JavaScript)

Kratzen, Jan-08-20225 Min. gelesen

Sind Sie auf der Suche nach Möglichkeiten, neue Technologien zu nutzen? Web-Extraktion oder Web-Scraping bietet Ihnen eine Möglichkeit, strukturierte Webdaten auf automatisierte Weise zu sammeln. Web Scraping wird zum Beispiel im elektronischen Handel eingesetzt, um die Preisgestaltung von Dienstleistungen und Produkten der Konkurrenz zu überwachen. Andere Anwendungsfälle von Web Scraping

Inhaltsübersicht

Sind Sie auf der Suche nach Möglichkeiten, neue Technologien zu nutzen? Web-Extraktion oder Web-Scraping bietet Ihnen eine Möglichkeit, strukturierte Webdaten auf automatisierte Weise zu sammeln. Web Scraping wird zum Beispiel im elektronischen Handel eingesetzt, um die Preisgestaltung von Dienstleistungen und Produkten der Konkurrenz zu überwachen. Andere Anwendungsfälle von Web Scraping sind unten aufgeführt.

  • Auffinden aktueller Daten auf Websites sozialer Medien
  • Sammeln von Daten von einer anderen Website zur Verwendung auf Ihrer eigenen Website
  • Extrahieren von E-Mail-Adressen aus Websites, die öffentliche E-Mails veröffentlichen
  • Scraping von Online-Shops nach Produktbildern und Verkaufsdaten

Sie werden lernen, wie man Web Scraping mit Node.js durchführt. Aber zuerst schauen wir uns an, was Node.js ist. Es handelt sich um eine quelloffene serverseitige Plattform zur Entwicklung von serverseitigen und Netzwerkanwendungen. Die Bibliothek ist sehr schnell in der Codeausführung, da die Anwendungen keine Daten puffern. Sie geben die Daten einfach in Stücken aus. Im Folgenden sind einige der Bereiche aufgeführt, in denen wir Node.js verwenden können.

  • Daten-Streaming-Anwendungen
  • Einseitige Anwendungen
  • Input/Output-gebundene Anwendungen
  • Datenintensive Echtzeit-Anwendungen

Warum Node.js für Web Scraping verwenden?

Im Folgenden sind die Gründe für die Verwendung von Node.js für Web Scraping aufgeführt.

Leicht zu erlernen - Javascript ist eine beliebte Programmiersprache, die von Frontend-Entwicklern verwendet wird. Sie können Node.js schnell erlernen und am Backend verwenden, da es ein einfaches Javascript ist. Sie müssen also keinen zusätzlichen Aufwand betreiben, um Node.js zu lernen.

Eine einzige Programmiersprache - Sie können Node.js verwenden, um serverseitige Anwendungen in Javascript zu schreiben. Kurz gesagt, die Node.js-Entwickler verwenden Javascript, um sowohl Frontend- als auch Backend-Webanwendungen zu schreiben. Sie brauchen keine andere serverseitige Programmiersprache zu verwenden. So können sie Webanwendungen leicht bereitstellen, da fast alle Webbrowser Javascript unterstützen. 

Skalierbarkeit - Die Node.js-Entwickler können die Anwendungen problemlos in horizontaler und vertikaler Richtung skalieren. Sie können zusätzliche Knoten zu den bestehenden Systemen hinzufügen, um die Anwendungen horizontal zu skalieren. Sie können die Anwendungen vertikal skalieren, indem sie zusätzliche Ressourcen zu den einzelnen Knoten hinzufügen. 

Hohe Leistung - Node.js verwendet die V8-Javascript-Engine von Google, um den Javascript-Code zu interpretieren, während er direkt in den Maschinencode kompiliert wird. So können Sie den Code mit dieser Engine effektiv implementieren. 

Caching - Die Entwickler können mit der Open-Source-Laufzeitumgebung von Node.js auch einzelne Module zwischenspeichern. Durch Caching können die Anwendungen die Webseiten schneller laden, sodass die Entwickler die Codes nicht wiederverwenden müssen.   

Web Scraping mit Node.js

Für das Web Scraping mit Node.js werden wir die folgenden zwei npm-Module verwenden.

cheerio - Es handelt sich um eine Javascript-Technologie, die zum Extrahieren von Daten aus Websites verwendet wird. Sie hilft bei der Auswahl, Bearbeitung und Ansicht von DOM-Elementen.

request-promise - Es ist ein einfacher HTTP-Client, mit dem Sie schnell und einfach HTTP-Aufrufe tätigen können.

Projekt einrichten

Sie müssen einen neuen Projektordner erstellen. Erstellen Sie eine index.js-Datei in diesem Ordner. Dann müssen Sie die Abhängigkeiten installieren. Öffnen Sie dazu Ihre Befehlszeile und geben Sie den folgenden Befehl ein. 

npm install --save anfordern anfordern-versprechen cheerio

Sie müssen die Request-Promise und Cheerio in Ihrer index.js-Datei mit dem folgenden Code anfordern.

const rp = require('request-promise');
const cheerio = require('cheerio');

Anfrage stellen

Sie wissen, dass request-promise eine Client- "Anfrage" mit Promise-Unterstützung ist. Mit anderen Worten, es akzeptiert ein Objekt als Eingabe und gibt ein Versprechen zurück. 

const options = {
 uri: `https://www.yourURLhere.com`,
 transform: function (body) {
   return cheerio.load(body);
 }
};

Im obigen Code muss das options-Objekt zwei Aufgaben erfüllen.

  • Durch die Übergabe der URL möchten Sie die folgenden Daten abrufen
  • Laden Sie das zurückgegebene HTML mit cheerio, damit Sie es verwenden können.

Der uri-Schlüssel im Code ist die Website, die Sie scrapen möchten.

Der Transform-Schlüssel lädt den zurückgegebenen Body mit request-promise in cheerio, bevor er ihn an uns zurückgibt.

Anfrage stellen

Sie können Ihren Antrag mit dem unten stehenden Code stellen.

rp(OPTIONS)
   .then(function (data) {
       // REQUEST SUCCEEDED: DO SOMETHING
   })
   .catch(function (err) {
       // REQUEST FAILED: ERROR OF SOME KIND
   });

Im obigen Code übergeben wir das Objekt options an request-promise. Dann warten wir ab, ob unsere Anfrage erfolgreich ist oder nicht. 

Nun erstellen wir unsere eigene Version des Codes, in der wir Pfeilfunktionen wie unten gezeigt verwenden.

rp(options)
 .then(($) => {
   console.log($);
 })
 .catch((err) => {
   console.log(err);
 });

Ersetzen Sie den Platzhalter uri durch die Website, die Sie scrapen möchten. Anschließend können Sie Ihre Konsole öffnen und Folgendes in die Datei index.js eingeben.

{ [Function: initialize]
 fn:
  initialize {
    constructor: [Circular],
    _originalRoot:
     { type: 'root',
       name: 'root',
       namespace: 'http://www.w3.org/1999/xhtml',
       attribs: {},
       ...

So können Sie Ihren ersten Scrape mit Node.js durchführen. Hier ist der vollständige Code, den wir bis jetzt gemacht haben.

const rp = require('request-promise');
const cheerio = require('cheerio');
const options = {
  uri: `https://www.google.com`,
  transform: function (body) {
    return cheerio.load(body);
  }
};

rp(options)
  .then(($) => {
    console.log($);
  })
  .catch((err) => {
    console.log(err);
  });

Verwenden Sie die Daten

Sie können cheerio verwenden, um die gewünschten Daten zu extrahieren. Die Implementierung des Cheerio-Selektors ist fast die gleiche wie die von jQuery. Sie können die Selektor-Methode verwenden, um Elemente im Dokument zu durchlaufen und auszuwählen. Sie können sie auch verwenden, um Daten zu erhalten und zu setzen. Sie wollen zum Beispiel den folgenden HTML-Code einer Website auslesen.

 id= "Städte">
 class="large">Europa
 id="mittel">Türkei
 class="small">Salem

Wir können '#' verwenden, um id's auszuwählen, '.', um Klassen auszuwählen. Die Elemente können über ihre Tag-Namen ausgewählt werden, wie unten gezeigt.

$('.large').text()
// Europa
$('#medium').text()
// Türkei
$('li[class=small]').html()

Wir können die Funktion each() verwenden, um durch mehrere Elemente zu iterieren. Wir können den inneren Text des Listenelements zurückgeben, indem wir denselben HTML-Code wie oben zeigen.

$('li').each(function(i, elem) {
 cities[i] = $(this).text();
});

So können Sie mit Node.js Daten aus Websites auslesen. Sie können auch zusätzliche Methoden verwenden, um die Daten von untergeordneten Elementen einer Liste oder den HTML-Code einer Website zu extrahieren.

Die Wichtigkeit der Verwendung von Node.js mit Proxies

Sie wissen, dass Proxys als Vermittler zwischen den Clients, die Ressourcen anfordern, und dem Server, der die Ressourcen bereitstellt, fungieren. Es gibt drei verschiedene Arten von Proxys, wie unten dargestellt.

Residential Proxy - Dieser Proxy enthält IP-Adressen von lokalen Internet Service Providern (ISP), so dass die Ziel-Website nicht feststellen kann, ob es sich um eine echte Person oder den Scraper handelt, der die Website besucht. 

Datacenter Proxy - Dieser Proxy-Typ stammt von einem Cloud-Service-Provider und wird von vielen Menschen genutzt, weil er billiger ist als Proxys für Privatpersonen.

Mobiler Proxy - Die mobilen Proxys sind IPs privater mobiler Geräte und funktionieren genauso wie private Proxys. Sie werden von Mobilfunknetzbetreibern bereitgestellt und sind sehr teuer. 

Sie können einen Proxy für Web-Scraping verwenden, indem Sie das requests-Modul von Python benutzen. Zunächst müssen Sie das requests-Modul importieren. Dann müssen Sie einen Pool von Proxys erstellen und diese durchlaufen. Sie können requests.get() verwenden, um die GET-Anfrage zu senden, indem Sie einen Proxy als Parameter an die URL übergeben, wie unten gezeigt.

import requests
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
# Sending a GET request to the url and
# passing the proxy as a parameter.
page = requests.get(url,
                   proxies={"http": proxy, "https": proxy})
 # Printing the content of the requested url.
print(page.text)

Sie erhalten die folgende Ausgabe.

Schlussfolgerung zum Web Scraping mit Node.js

Bisher haben wir besprochen, dass Sie strukturierte Daten aus Websites mit der automatisierten Methode namens Web Scraping extrahieren können. Sie können die Websites mit verschiedenen Sprachen scrapen, aber in diesem Artikel haben wir gelernt, wie man Node.js verwendet, um Daten von Websites zu sammeln. Alles, was wir tun müssen, ist, Code in die index.js-Datei des Projektordners einzufügen. Nachdem wir das Projekt eingerichtet haben, können wir die Anfrage zum Extrahieren der Daten einstellen und durchführen. Außerdem können wir die Daten für verschiedene Zwecke verwenden. Sie wissen, dass es nicht sicher ist, Websites zu scrapen. Daher müssen Sie Proxys verwenden, um Daten von der gewünschten Website zu sammeln. Sie können Proxys für den Wohnsitz oder für das Rechenzentrum verwenden, wobei die Proxys für den Wohnsitz vorzuziehen sind, da sie schnell sind und nicht leicht entdeckt werden können.