So extrahieren Sie Website-Metadaten mit der wdzwdz Meta Scraping API

Metadaten-Extraktion aus Webseiten: Ein umfassender Leitfaden

Web Scraping, im Allgemeinen, bezieht sich auf das Extrahieren von Daten von einer Webseite, wobei das HTML, welches beim Laden der Seite generiert wird, genutzt wird.

Metascraping hingegen, fokussiert auf das Herausziehen der Metadaten aus den Meta-Tags einer Webseite.

Die Metadaten einer Webseite sind Informationen, die die Seite selbst beschreiben, jedoch nicht den eigentlichen Inhalt. Diese können beispielsweise den Namen des Autors, den Titel und die Beschreibung der Webseite beinhalten.

Metadaten helfen sowohl Benutzern als auch Suchmaschinen, das Thema einer Seite besser zu verstehen. Durch das Scrapen von Metadaten können Benutzer schnell und effizient Informationen über Webseiten sammeln.

Es existieren verschiedene Methoden, um Metadaten von Webseiten zu extrahieren. Dazu gehören das manuelle Scraping, die Verwendung von Bibliotheken, oder die Nutzung einer API, wie der wdzwdz Metascraping API.

Verschiedene Wege zur Metadaten-Extraktion

Beim manuellen Scraping kann man die Entwicklertools des Browsers (z.B. Chrome DevTools) nutzen und die Metadaten über den „Elemente“-Tab extrahieren. Diese Methode ist jedoch zeitaufwendig und repetitiv, besonders wenn es sich um eine große Anzahl von Seiten handelt. Es gibt effizientere, automatisierte Ansätze:

Ein Ansatz besteht darin, den Code von Grund auf neu zu schreiben. Hierbei sendet man eine HTTP-Anfrage an die Webseite, deren Metadaten man gewinnen möchte. Anschließend wird der HTML-Code der Antwort analysiert und mithilfe von regulären Ausdrücken oder Mustererkennung die Daten aus den Meta-Tags extrahiert. Dieser Ansatz ist jedoch ineffizient, da bestehender Code neu entwickelt wird.

Eine weitere Möglichkeit ist die Verwendung einer Bibliothek, passend zur bevorzugten Programmiersprache. Dies vereinfacht den Prozess durch Abstraktion der Implementierungsdetails. Ist jedoch keine passende Bibliothek vorhanden oder wird sie von der gewählten Laufzeitumgebung nicht unterstützt, ist dieser Ansatz nicht praktikabel.

Die dritte Methode, und oft die effizienteste, ist die Verwendung einer API wie der wdzwdz Metascraping API. Dieser Ansatz bietet eine einheitliche Schnittstelle, unabhängig von der verwendeten Programmiersprache, und kann mit jeder Sprache genutzt werden, die HTTP-Anfragen unterstützt.

Dieser Artikel zeigt, wie die wdzwdz Metascraping API mit cURL, PHP und JavaScript (NodeJS) verwendet werden kann.

Aufgrund der erwähnten Nachteile anderer Ansätze bietet die Verwendung der wdzwdz API folgende Vorteile:

  • Unabhängigkeit von Sprache und Laufzeitumgebung.
  • Kein unnötiger Aufwand durch das Neuerfinden des Rades.
  • Effizientes Scrapen mehrerer Webseiten (innerhalb von Sekunden).
  • Einfache Handhabung.
  • Kostenlose Nutzung.

Erste Schritte mit der wdzwdz API

Für die Nutzung der wdzwdz API ist ein API-Schlüssel erforderlich. Dieser kann auf der wdzwdz Webseite, nach dem Erstellen eines kostenlosen Kontos, bezogen werden. Nach der Anmeldung im Dashboard, wird der API-Schlüssel angezeigt.

Der API-Endpunkt ist unter https://api.wdzwdz.com/metascraping erreichbar. Bei jeder Anfrage sollte der API-Schlüssel als Request-Header (x-api-key) mit dem Wert des Schlüssels übermittelt werden.

Zusätzliche Parameter sind im Request-Body anzugeben. Diese umfassen die URL, das Gerät und optional das Proxy-Land.

  • Die URL definiert die zu scrappende Webseite.
  • Das Gerät bestimmt, ob die Webseite als Mobil- oder Desktop-Version abgerufen wird.
  • Das Proxy-Land (optional) legt fest, aus welchem Land die Anfrage gestellt wird. Diese Funktion ist Teil der kostenpflichtigen wdzwdz Pläne.

Da die Parameter als Teil des Request-Bodys übergeben werden, muss die Anfrage eine POST-Anfrage sein, da GET-Anfragen keine Inhalte im Body übermitteln können.

In der ersten Demonstration wird das cURL-Tool der Kommandozeile genutzt, um Anfragen an die Metascraping API zu senden. Voraussetzung ist die Installation von cURL.

Ein Bash-Terminal wird verwendet, welches unter macOS und Linux Standard ist. Für Windows wird Git Bash benötigt.

Nach der Installation von cURL kann der Befehl verwendet werden, wobei Optionen die Parameter definieren: Methode, Endpunkt, Request-Body, Header.

curl -X POST 
https://api.wdzwdz.com/metascraping  
-d '{ "url": "https://tesla.com" }' 
-H 'Content-Type: application/json' 
-H 'x-api-key: <API_KEY>'

Hinweis: Der Backslash erlaubt es, die Befehlseingabe über mehrere Zeilen zu verteilen.

Der Befehl definiert die HTTP-Methode als POST und den Endpunkt als wdzwdz API Metascraping Endpunkt.

Der Request-Body wird als JSON-Objekt mit einer URL-Eigenschaft gesendet (hier: https://tesla.com). Zusätzlich werden Header hinzugefügt, welche den Body-Inhaltstyp als JSON definieren und den API-Schlüssel über den x-api-key-Header bereitstellen.

Die Ausführung des Befehls erzeugt folgende Ausgabe:

{"timestamp":1669328564856,"apiStatus":"success","apiCode":200,"meta":{"url":"https://tesla.com","device":"desktop","test":{"id":"1fh2c30i05vmvxb99pdh6t6hze2x72jv"}},"data":{"author":null,"date":null,"description":"Tesla is accelerating the world’s transition to sustainable energy with electric cars, solar and integrated renewable energy solutions for homes and businesses.","image":"https://tesla-cdn.thron.com/delivery/public/image/tesla/6139697c-9d6a-4579-837e-a9fc5df4a773/bvlatuR/std/1200x628/Model-3-Homepage-Social-LHD","logo":"https://tesla.com/themes/custom/tesla_frontend/assets/favicons/favicon-196x196.png","publisher":"Tesla","title":"Electric Cars, Solar & Clean Energy | Tesla","url":"https://www.tesla.com/","lang":"en"}}

Diese Ausgabe entspricht dem gewünschten Ergebnis.

Für dieses Projekt wird ein NodeJS Skript erstellt, um Daten von der API abzurufen. Dazu ist NodeJS erforderlich. Ebenso wird NPM oder ein anderer Paketmanager benötigt. Für die Ausführung von Befehlen wird das Bash-Terminal genutzt.

Zunächst wird ein leerer Projektordner erstellt und im Terminal geöffnet.

mkdir metascraping-js && cd metascraping-js

Danach wird die Datei erstellt, in der das Skript geschrieben wird:

touch index.js

Das Projekt wird als Node Projekt initialisiert:

npm init -y

Um die ESModule Syntax nutzen zu können, wird im package.json File „type“ : „module“ hinzugefügt:

{
  "name": "metascraping",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
}

Als Nächstes wird das node-fetch Paket installiert, welches eine Fetch Funktion für NodeJS bereitstellt, die der Fetch Funktion des Browsers ähnelt und HTTP-Anfragen vereinfacht.

npm install node-fetch

Nach erfolgreicher Installation, kann mit der Bearbeitung des Skripts begonnen werden. Die Datei `index.js` wird in einem Editor geöffnet. Im Beispiel wird der Terminal-basierte Editor `nano` verwendet.

nano index.js

Zunächst wird die Fetch Funktion importiert, welche den Standardexport des `node-fetch` Moduls darstellt.

import fetch from 'node-fetch'

Danach wird der Request-Body definiert. Dies wird ein JSON-String mit der URL-Eigenschaft sein, deren Wert die zu scrappende Webseite darstellt.

const body = JSON.stringify({ url: 'https://spacex.com' });

Als nächstes können die Request-Optionen definiert werden, welche an die Fetch Funktion beim Aufruf übergeben werden.

const options = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'x-api-key': <YOUR API KEY here>
    },
    body: body
}

Die Request-Methode wird als POST definiert. Zwei Header werden definiert: einer für den JSON-Inhaltstyp und einer für den API-Schlüssel.

Der Platzhalter `<YOUR API KEY>` muss durch den tatsächlichen API-Schlüssel ersetzt werden. Es ist empfehlenswert, diesen nicht direkt im Code zu hinterlegen, sondern über Umgebungsvariablen zu laden. Zuletzt wird die `body` Eigenschaft mit dem Wert der zuvor definierten `body` Konstante angegeben.

Abschließend wird der Fetch Aufruf durchgeführt:

fetch('https://api.wdzwdz.com/metascraping', options)
    .then(response => response.json())
    .then(json => console.log(json))

Die Fetch Funktion wird mit dem API-Endpunkt und den zuvor definierten Optionen aufgerufen. Da die Fetch Funktion ein Promise zurückgibt, wird ein Callback angehängt, welcher die JSON-Antwort mit `then` parst.

Der Callback gibt ein weiteres Promise zurück, und wenn es aufgelöst wird, wird das zurückgegebene Objekt mit `console.log()` ausgegeben.

Die vollständige `index.js` Datei sollte wie folgt aussehen:

import fetch from 'node-fetch'

const body = JSON.stringify({ url: 'https://spacex.com' });

const options = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'x-api-key': <YOUR API KEY here>
    },
    body: body
}

fetch('https://api.wdzwdz.com/metascraping', options)
    .then(response => response.json())
    .then(json => console.log(json))

Zum Ausführen des Skripts werden die Änderungen gespeichert, der Editor geschlossen und folgender Befehl ausgeführt:

node .

Das Ergebnis sollte wie folgt aussehen:

{
  timestamp: 1669305079698,
  apiStatus: 'success',
  apiCode: 200,
  meta: {
    url: 'https://spacex.com',
    device: 'desktop',
    test: { id: '8m3srgqw06q2k8li5p6x70s8165d6e2f' }
  },
  data: {
    author: null,
    date: null,
    description: 'SpaceX designs, manufactures and launches advanced rockets and spacecraft.',
    image: 'https://www.spacex.com/static/images/share.jpg',
    logo: 'https://spacex.com/static/images/favicon.ico',
    publisher: 'SpaceX',
    title: 'SpaceX',
    url: 'https://www.spacex.com/',
    lang: 'en'
  }
}

Nutzung der wdzwdz API mit PHP

Zur Nutzung der wdzwdz Metascraping API wird die Installation von PHP und Composer vorausgesetzt.

Zunächst wird ein Projektordner erstellt und geöffnet:

mkdir metascraping-php && cd metascraping-php

Danach wird GuzzleHTTP installiert. Guzzle ist einer von mehreren PHP Clients, welche mit der wdzwdz API verwendet werden können.

composer require guzzlehttp/guzzle

Nach der Installation von Guzzle kann ein Script erstellt werden:

touch script.php

Danach kann der Code geschrieben werden. Die Datei `script.php` wird mit einem Editor geöffnet. Im Beispiel wird der Editor `nano` genutzt.

nano script.php

Innerhalb des Scripts wird grundlegendes PHP eingefügt:

<?php
    // All code goes here
?>

Zum Laden der benötigten Erweiterungen werden die `Request` und `Client` Klassen von Guzzle importiert. Dieser Code wird zwischen den zuvor geschriebenen `` eingefügt.

require_once('vendor/autoload.php');

use GuzzleHttpClient;
use GuzzleHttpPsr7Request;

Als nächstes wird ein Client durch Instanziierung der `GuzzleHttpClient` Klasse erstellt.

$client = new GuzzleHttpClient();

Danach werden die Header für die Anfrage definiert. Hier werden zwei Header angegeben: einer für den JSON-Inhaltstyp und einer für den API-Schlüssel.

$headers = [
    'x-api-key' => <YOUR API KEY HERE>,
    'Content-Type' => 'application/json'
];

Der Platzhalter `<YOUR API KEY HERE>` wird durch den API-Schlüssel aus dem wdzwdz API Dashboard ersetzt.

Danach wird der Body definiert. In diesem Fall ist der Body ein JSON-String, dessen `url` Eigenschaft auf `https://twitter.com` gesetzt wird.

$body = json_encode([
    "url" => "https://twitter.com"
]);

Um eine Anfrage zu erstellen, wird die zuvor importierte `Request` Klasse instanziiert und die Request-Methode, der Endpunkt, die Header und der Body übergeben.

$request = new Request('POST', 'https://api.wdzwdz.com/metascraping', $headers, $body);

Als nächstes wird der Client genutzt, um die Anfrage zu senden.

$response = $client->sendAsync($request)->wait();

Danach kann der Body der Anfrage extrahiert und auf der Konsole ausgegeben werden.

echo $response->getBody();

Das vollständige Script `script.php` sollte so aussehen:

<?php
    require_once('vendor/autoload.php');

	use GuzzleHttpClient;
	use GuzzleHttpPsr7Request;

	$client = new GuzzleHttpClient();

	$headers = [
    	'x-api-key' => <YOUR API KEY>,
    	'Content-Type' => 'application/json'
	];

	$body = json_encode([
    	"url" => "https://twitter.com"
	]);

	$request = new Request('POST', 'https://api.wdzwdz.com/metascraping', $headers, $body);

	$response = $client->sendAsync($request)->wait();

	echo $response->getBody();
?>

Nach dem Speichern und Schließen des Scripts kann dieses mit folgendem Befehl ausgeführt werden:

php script.php

Das Ergebnis sollte wie folgt aussehen:

{
    "timestamp":1669322100912,
    "apiStatus":"success",
    "apiCode":200,
    "meta": {
        "url":"https://twitter.com",
        "device":"desktop",
        "test":{ 
            "id":"wn1nj30r04bk0ijtpprwdqmtuirg9lze"
        }
     },
     "data":{ 
         "author":null,
         "date":null,
         "description":"The latest stories on Twitter - as told by Tweets.",
         "image":"https://abs.twimg.com/a/1602199131/img/moments/moments-card.jpg",
         "logo":"https://abs.twimg.com/responsive-web/client-web/icon-ios.b1fc7279.png",
         "publisher":"Twitter",
         "title":"Explore",
         "url":"https://twitter.com/explore",
         "lang":"en"
     }
}

Abschließende Worte

Dieser Leitfaden hat verschiedene Methoden zur Nutzung der wdzwdz Metascraping API aufgezeigt.

Die Metascraping API erlaubt es auch, weitere Parameter als die URL anzugeben. Einer dieser Parameter ist der Proxy Parameter, der nur mit dem wdzwdz API Premium Plan genutzt werden kann. Unabhängig davon ist die wdzwdz API leistungsstark genug für viele Anwendungen.

Weitere Informationen sind in der offiziellen Dokumentation der wdzwdz API zu finden.