So extrahieren und speichern Sie Produktdaten effizient
Web Scraping ist eine gängige Methode, um automatisch Daten von Webseiten zu extrahieren. Dies wird häufig genutzt, um Informationen wie Produktpreise, Nachrichtenartikel, Börsendaten oder Kundenbewertungen zu sammeln. Mit PHP, XAMPP und MySQL können Sie ein einfaches, aber leistungsfähiges Setup aufbauen.
In diesem Artikel zeigen wir Ihnen, wie Sie Web Scraping mit PHP umsetzen, XAMPP für die lokale Entwicklung einrichten und die gesammelten Daten sicher in einer MySQL-Datenbank speichern können.
Schritt 1: Verbindung zur MySQL-Datenbank herstellen
Zu Beginn stellt das Skript eine Verbindung zur MySQL-Datenbank her. Dazu werden die Zugangsdaten wie der Servername, Benutzername und Passwort benötigt. Falls die Verbindung fehlschlägt, gibt das Skript eine Fehlermeldung aus und bricht ab.
Schritt 2: Abruf der Ziel-URL
Die Ziel-URL (https://example.com/shop) wird mit der Funktion file_get_contents() abgerufen. Falls der Abruf fehlschlägt, wird das Skript beendet und gibt eine Fehlermeldung aus.
Schritt 3: HTML-Inhalt analysieren
Der HTML-Inhalt wird in ein DOM-Dokument geladen, um die Struktur der Seite zu analysieren. Interne Fehler von libxml werden dabei ignoriert, um Ladeprobleme zu vermeiden.
Schritt 4: Wichtige Produktdaten extrahieren
Mit DOMXPath wird eine gezielte Abfrage erstellt, die nach Produktkarten auf der Seite sucht. Jede Karte enthält wesentliche Daten, die extrahiert werden:
- Produktname: Wird aus dem
<h5>-Tag extrahiert. - Produktpreis: Wird aus dem
<span>-Tag extrahiert. Falls durchgestrichen, wird der aktuelle Preis angezeigt. - Bild-URL: Wird aus dem
<img>-Tag entnommen. - Sale-Status: Wird durch das Vorhandensein eines
<div>-Tags mit der Klasse "badge" erkannt.
Falls ein Datenfeld nicht vorhanden ist, wird ein Standardwert gesetzt (z. B. "No Name" für Produktnamen und "No Price" für Preise).
Schritt 5: Daten in die MySQL-Datenbank speichern
Die extrahierten Daten werden in eine MySQL-Datenbank eingefügt. Hierzu wird ein vorbereiteter SQL-Befehl verwendet, um die Daten in die Tabelle products zu speichern. Nach erfolgreichem Einfügen wird eine Bestätigungsmeldung ausgegeben und die Datenbankverbindung geschlossen.
Voraussetzungen
- XAMPP-Installation: Laden Sie XAMPP von der offiziellen Webseite (apachefriends.org) herunter und installieren Sie es.
- PHP-Grundkenntnisse: Grundlegendes Verständnis von PHP-Skripten und Syntax.
- MySQL-Wissen: Wissen über das Erstellen und Verwalten von Datenbanken.
- Internetverbindung: Notwendig zum Abrufen von Webseiteninhalten.
PHP-Code für Web Scraping
Der folgende PHP-Code ruft den Inhalt einer Webseite ab und extrahiert Produktdaten.
Speichern Sie die Datei mit dem PHP-Code als index.php in das Verzeichnis C:\xampp\htdocs\ (auf Windows) oder /opt/lampp/htdocs/ (auf Linux/Mac), wenn Sie XAMPP verwenden. Dieses Verzeichnis ist der Standard-Webordner, in dem Ihre PHP-Dateien aufgerufen werden können.
<?php
// Verbindung zur MySQL-Datenbank herstellen
$servername = "localhost";
$username = "root"; // Standardnutzer
$password = ""; // Standardpasswort
$dbname = "web_scraping";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
// URL der Zielwebseite
$url = "https://example.com/shop";
$htmlContent = file_get_contents($url);
if ($htmlContent === FALSE) {
die("Fehler beim Abrufen der Webseite.");
}
// HTML analysieren
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($htmlContent);
libxml_clear_errors();
// XPath erstellen, um gezielt nach Produktdaten zu suchen
$xpath = new DOMXPath($dom);
// Alle Produktkarten extrahieren
$product_cards = $xpath->query('//div[contains(@class, "col mb-5")]');
foreach ($product_cards as $card) {
// Extrahieren des Produktnamens
$name = $xpath->query('.//h5', $card);
$product_name = $name->length > 0 ? $name->item(0)->textContent : 'No Name';
// Extrahieren des Produktpreises
$price = $xpath->query('.//div[contains(@class, "card-body")]//span', $card);
$product_price = $price->length > 0 ? $price->item(0)->textContent : 'No Price';
// Extrahieren des Bild-URLs
$img = $xpath->query('.//img', $card);
$image_url = $img->length > 0 ? $img->item(0)->getAttribute('src') : 'No Image';
// Extrahieren des Sale-Status
$sale_badge = $xpath->query('.//div[contains(@class, "badge")]', $card);
$is_on_sale = $sale_badge->length > 0 ? 'On Sale' : 'No Sale';
// Daten in die MySQL-Datenbank einfügen
$stmt = $conn->prepare("INSERT INTO products (name, price, image_url, sale_status) VALUES (?, ?, ?, ?)");
$stmt->bind_param("ssss", $product_name, $product_price, $image_url, $is_on_sale);
$stmt->execute();
}
echo "Produktdaten erfolgreich gespeichert.";
$conn->close();
?>
MySQL-Datenbank einrichten:
- Öffnen Sie phpMyAdmin unter http://localhost/phpmyadmin.
- Erstellen Sie eine neue Datenbank web_scraping.
- Erstellen Sie eine Tabelle products mit den erforderlichen Spalten.
CREATE DATABASE IF NOT EXISTS web_scraping;
USE web_scraping;
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price VARCHAR(255) NOT NULL,
image_url VARCHAR(255) NOT NULL,
sale_status VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Das Skript ausführen
Um das Skript auszuführen, öffnen Sie Ihren Webbrowser und navigieren Sie zu http://localhost/. Das Skript wird automatisch gestartet, und die extrahierten Produktdaten werden in der MySQL-Datenbank gespeichert. Sie können die gespeicherten Daten in der Tabelle products in phpMyAdmin einsehen.
Webscraping zuverlässig betreiben
Ein Demonstrationsskript reicht für wiederkehrende Datenerfassung meist nicht aus. Produktive Lösungen benötigen Fehlerbehandlung, Protokollierung, kontrollierte Abrufintervalle und eine klare Datenstruktur. Für Preisbeobachtung oder Sortimentsdaten kann außerdem eine Verbindung zu einem bestehenden System sinnvoll sein, beispielsweise zu einem Shopware-Shop.
Wenn Daten regelmäßig erfasst, bereinigt und bereitgestellt werden sollen, finden Sie weitere Informationen unter professionelle Webscraping-Lösungen.
Rechtliche und technische Hinweise
- Berechtigung: Prüfen Sie Nutzungsbedingungen, Zugriffsrechte sowie mögliche Urheber- und Datenschutzanforderungen.
- Zugriffsschutz: Umgehen Sie keine Logins, CAPTCHAs oder technischen Sperren. Ein eindeutiger User-Agent dient der Identifikation, nicht der Freigabe.
- Rate-Limiting: Begrenzen Sie Abrufhäufigkeit und Parallelität, damit der Zielserver nicht unnötig belastet wird.
- Änderungen: HTML-Strukturen können sich jederzeit ändern. Validieren Sie Ergebnisse und behandeln Sie fehlende Felder kontrolliert.