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://www.owlymedia.de/demo/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://www.owlymedia.de/demo/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.
- Compliance: Achten Sie darauf, die Nutzungsbedingungen der Zielwebseiten zu beachten.
- Botschutz: Verwenden Sie den User-Agent-Header, um den Server nicht zu überlasten.
- Rate-Limiting: Implementieren Sie Wartezeiten, um den Server nicht zu überlasten.