PHP dient nicht nur dazu, dynamische Websites zu erstellen. Es kann auch zu einem Verbündeten werden für online Daten sammeln.
Mithilfe von Fachbibliotheken können Sie leicht einen Scraper einrichten effektiv zu sein. Lassen Sie uns gemeinsam sehen, wie das geht.

Voraussetzungen für das Scraping mit PHP
Bevor Sie beginnen, vergewissern Sie sich :
- ✅ Zu haben Grundlagen in der Programmierung mit PHP.
- ✅ Zu haben Kenntnisse in HTML und CSS um gezielt Daten zu extrahieren.
- ✅ Zu wissen, wie man benutzt WählenEs handelt sich um ein Tool zur Verwaltung von PHP-Abhängigkeiten für die Installation von Scraping-Bibliotheken wie Guzzle, Symfony DomCrawler oder Goutte.
- ✅ Ein lokaler Webserver um Ihren Code auszuführen (XAMPP, WAMP oder MAMP).
- ✅ Ein Code-Editor um Ihre PHP-Skripte zu schreiben.
Welche Tools sind für Web Scraping mit PHP unerlässlich?
PHP allein reicht nicht aus. Hier sind die Bibliotheken die das Scraping schnell und effektiv machen.
1. Guzzle: Der HTTP-Client
Guzzle ist die am häufigsten verwendete Bibliothek für HTTP-Anfragen senden. Um es mit WählenÖffnen Sie Ihr Terminal, gehen Sie in den Ordner Ihres Projekts und geben Sie den Befehl :
composer require guzzlehttp/guzzle
Composer lädt die Bibliothek herunter und macht sie direkt in Ihrem Code verwendbar.
Hier ist ein einfaches Codebeispiel für den Inhalt einer URL abrufen :
request('GET', $url);
// Wir rufen den HTTP-Code ab.
$statusCode = $response->getStatusCode();
// Wir rufen den Inhalt der Seite ab.
$content = $response->getBody()->getContents();
echo "HTTP-Code: " . $statusCode . PHP_EOL;
echo "Inhalt der Seite:" . PHP_EOL;
echo $content;
} catch (\Exception $e) {
echo "Fehler: " . $e->getMessage();
}
2. Symfony DomCrawler und Goutte: Datenextraktion
Um HTML zu durchsuchen und zu analysieren, werden zwei Bibliotheken häufig verwendet:
- Symfony DomCrawler die es ermöglicht, mit CSS-Selektoren durch HTML zu navigieren und gezielt bestimmte Elemente anzusteuern.
- Tropfen der ein Wrapper von Guzzle und DomCrawler ist, vereinfacht den Scraping-Prozess enorm.
Beispiel mit Symfony DomCrawler :
request('GET', 'https://exemple.com');
$html = $response->getBody()->getContents();
$crawler = new Crawler($html);
// Auswahl nach Klasse
$crawler->filter('.meine-klasse')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Auswahl nach ID
$crawler->filter('#mon-id')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Auswahl nach Tag
$crawler->filter('h1')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
Beispiel mit Goutte
request('GET', 'https://exemple.com');
// Auswahl nach Klasse
$crawler->filter('.meine-klasse')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Auswahl nach ID
$crawler->filter('#mon-id')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Auswahl nach Tag
$crawler->filter('p')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
3. Andere Bibliotheken und Werkzeuge
Um noch einen Schritt weiter zu gehen, gibt es noch weitere Optionen:
- 🔥 PHP-Scraper : Hierbei handelt es sich um eine PHP-Bibliothek, die das Extrahieren von Informationen aus Webseiten erleichtert, indem sie die Komplexität von HTML und Selektoren verwaltet. Sie wird von Entwicklern häufig in ihren Projekten über Composer verwendet.
# Installation mit Composer
composer require fabpot/drop
request('GET', 'https://example.com');
$title = $crawler->filter('title')->text();
echo "Titel der Seite: " . $title;
- 🔥 Bright Data : Es handelt sich um eine professionelle Plattform für die groß angelegte Datenerfassung mit integrierten Proxys.

- 🔥 ScraperAPI : Hierbei handelt es sich um einen cloudbasierten Web-Scraping-Dienst, der über eine API zugänglich ist. Anstatt lokale Bibliotheken für die gesamte Arbeit zu verwenden, senden Sie eine einfache Anfrage an die API von ScraperAPI und geben dabei die URL der zu scrapendenden Seite an.
Wie erstellt man einen einfachen Web Scraper in PHP?
Hier ist ein Tutorial, um einen funktionierenden Scraper in PHP zu erstellen :
Schritt 1: Installation der Abhängigkeiten
Verwenden Sie Wählen zu installieren Tropfen durch den Befehl :
composer require fabpot/drop
Schritt 2: Den Inhalt einer Seite abrufen
Mach ein HTTP GET-Anfrage und rschöpfen Sie den HTML-Inhalt ab der Seite mithilfe von Goutte mit dem Befehl :
request('GET', $url);
// Bei Bedarf rohes HTML abrufen.
$html = $crawler->html();
echo substr($html, 0, 500) . '...'; // Vorschau
Schritt 3: Daten extrahieren
Sobald Sie den HTML-Inhalt der Seite abgerufen haben, besteht das Ziel darin, bestimmte Daten zu extrahieren.
👉 Hier ist ein Beispiel für PHP-Code für Titel einer Seite scrapen eines Blogs mit Goutte, indem Sie einen CSS-Selektor verwenden, um gezielt die Tags <h2> in den Elementen ..
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$url = 'https://exemple.com/blog'; // Remplacez par l'URL de votre page cible
// Faire une requête GET pour récupérer la page
$crawler = $client->request('GET', $url);
// Sélectionner les éléments <h2> dans <article> avec le sélecteur CSS
$titres = [];
$crawler->filter('article h2')->each(function ($node) use (&$titres) {
// Récupérer le texte du titre
$titres[] = trim($node->text());
});
// Afficher les titres extraits
print_r($titres);
?>
In diesem Beispiel:
- Wir verwenden den CSS-Selektor
'artikel h2um die Titel der Artikel in den Tags anzusprechen<h2>innerhalb der Tags.. - Der Text jedes Titels wird mit der Methode extrahiert
text()und fügen es der Tabelle hinzu.$itel. - Die Titel werden dann mit
print_r($itel);.
Das CSS-Selektoren (oder XPath) können auch verwendet werden, um extrahieren Attribute HTML-Elementen. Wenn beispielsweise jeder Blog-Titel ein Link in einem <a>können wir das Attribut href um die URLs der Artikel zu erhalten.
👉 Hier ein Beispiel mit Goutte für extrahieren Sie die Links Artikel:
request('GET', $url);
// Wählen Sie die Links in den Titeln aus.
$itel = [];
$crawler->filter('article h2 a')->each(function ($node) use (&$itle) {
$itle = trim($node->text());
1TP65Link = $node->attr('href'); // Das Attribut href abrufen
// Fügen Sie den Titel und die URL zur Tabelle hinzu.
$itle[] = [ [
'title' => $itle,
'url' => 1TP65Link,
];
});
// Ergebnisse anzeigen
print_r($itel);
?>
In diesem Beispiel:
- Wir wählen die in den Tags enthaltenen Links aus
<a>innerhalb der Tags<h2>in den Elementen.. - Wir rufen das Attribut
hrefjeder Verknüpfung mit der Methodeattr('href'). - Die Titel und ihre URLs werden der Tabelle hinzugefügt.
$itelund dann mitprint_r($itel);.
👉 Das Bild $itel wird Elemente mit sowohl dem Titel und die Verknüpfung von jedem Artikel. Hier ein Beispiel für das Format der zurückgegebenen Daten :
Array
(
[0] => Array
(
[title] => Titel des Artikels 1
[url] => /article1
)
[1] => Array
(
[title] => Titel von Artikel 2
[url] => /article2
)
)
In diesem Beispiel:
- Jedes Element des Arrays ist ein assoziatives Array mit zwei Schlüsseln :
Titelfür den Titel des Artikels undurlfür die entsprechende URL. - Die extrahierten Daten werden in Form einer zweistufigen Tabelle präsentiert, wobei jeder Eintrag eine Überschrift und den dazugehörigen Link enthält.
Schritt 4: Daten strukturieren und speichern
Sobald die Daten extrahiert sind, ist es wichtig, sie richtig zu organisieren. Zu diesem Zweck strukturieren wir sie in einem PHP-Tabelleund dann in ein strukturiertes Format exportieren, z. B. JSON Wo CSV.
request('GET', $url);
// Titel und URLs in ein strukturiertes Array extrahieren.
$data = [];
$crawler->filter('article h2 a')->each(function ($node) use (&$data) {
$data[] = [
'title' => trim($node->text()), // Titel abrufen.
'url' => $node->attr('href'), // Das Attribut href (URL) abrufen.
];
});
// Zeigen Sie die extrahierten Daten an.
print_r($data);
?>
Nachdem die Daten organisiert wurden, können Sie sie im Format JSONDies ist praktisch für APIs oder für die Verwendung in Webanwendungen:
``````
Die Datei export.json wird mit einem lesbaren Format erstellt, das etwa so aussehen könnte:
[
{
"title": "Titel von Artikel 1",
"url": "/article1".
},
{
"title": "Überschrift von Artikel 2",
"url": "/article2".
}
]
Wenn Sie die Daten als CSV-Tabelle exportieren möchten, können Sie mit fputcsv um die Daten in eine CSV-Datei zu schreiben :
<?php
// Exporter les données en CSV
$fp = fopen('export.csv', 'w');
// Ajouter l'en-tête (titres des colonnes)
fputcsv($fp, ['title', 'url']);
// Ajouter chaque ligne de données
foreach ($data as $row) {
fputcsv($fp, [$row['title'], $row['url']]);
}
// Fermer le fichier
fclose($fp);
echo "Les données ont été exportées en CSV dans 'export.csv'.";
?>
Die Datei export.csv wird in etwa so aussehen:
title,url
Titel des Artikels 1,/article1
Titel des Artikels 2,/article2
Wie gehe ich mit häufigen Problemen beim Web Scraping in PHP um?
Bei einer Operation web scraping in PHPWenn Sie sich mit Ihrem Computer beschäftigen, kann es zu Problemen kommen. Hier sind die Lösungen für die häufigsten.
1. Mit Fehlern umgehen
- Verbindungsfehler
Manchmal kommt die Anfrage nicht einmal beim Server an. Es kann vorkommen, dass Sie auf „Kein Netz“, „Ungültige URL“, „Server nicht erreichbar“usw. In diesem Fall muss ein try/catch um zu verhindern, dass Ihr Skript abrupt beendet wird.
👉 Hier ein Beispiel mit Guzzle :
request('GET', 'https://example.com/api/data');
// Überprüfen Sie, ob die Anfrage erfolgreich war.
if ($response->getStatusCode() === 200) {
// Verarbeitet die Antwort bei Erfolg.
$body = $response->getBody();
echo "Daten empfangen: " . $body;
}
} catch (RequestException $e) {
// Erfassen von Verbindungs- und Anfragefehlern.
if ($e->hasResponse()) {
// Anzeige des Fehlercodes, falls verfügbar.
echo "Fehler bei der Abfrage: " . $e->getResponse()->getStatusCode();
} else {
// Bei einem Verbindungsfehler (z. B. Server nicht erreichbar).
echo "Verbindungsfehler: " . $e->getMessage();
}
}
}
// Aufruf der Funktion
make_request_with_guzzle();
?>
- HTTP-Statuscodes
Selbst wenn die Verbindung funktioniert, kann der Server mit einem Fehler (404 = Seite nicht gefunden, 500 = Internetfehler, usw.). Sie können den Statuscode testen mit getStatusCode().
request('GET', 'https://example.com/api/data');
// Überprüfen Sie den Statuscode der Antwort.
$status_code = $response->getStatusCode();
// Prüfen Sie, ob die Anfrage erfolgreich war.
if ($status_code === 200) {
// Verarbeitet die Antwort bei Erfolg.
$body = $response->getBody();
echo "Erfolgreiche Antwort mit dem Code: " . $status_code . "
";
echo "Daten empfangen: " . $body;
} elseif ($status_code === 404) {
echo "Fehler 404: Seite nicht gefunden.
";
} elseif ($status_code === 500) {
echo "Fehler 500: Interner Serverfehler.
";
} else {
echo "Statuscode: " . $status_code . "
";
}
} catch (RequestException $e) {
// Erfassen von Verbindungs- und Anfragefehlern.
if ($e->hasResponse()) {
// Anzeige des HTTP-Fehlercodes, falls verfügbar.
echo "HTTP-Fehler: " . $e->getResponse()->getStatusCode() . "
";
} else {
// Bei einem Verbindungsfehler (z. B. Server nicht erreichbar).
echo "Verbindungsfehler: " . $e->getMessage();
}
}
}
// Aufruf der Funktion
make_request_with_guzzle();
?>
- Parsing-Fehler
Parsing ist die Analyse des HTML-Codes durch Ihren Scraper. Wenn die Seite fehlerhaft formatiert ist, können DomCrawler oder Goutte abstürzen oder keine Ergebnisse zurückgeben.
Um solche Fehler zu vermeiden, sollten Sie immer überprüfen, ob der Inhalt vorhanden ist, bevor Sie versuchen, ihn zu extrahieren. Verwenden Sie Bedingungen. (count(), filter()...) um sicherzustellen, dass das gewünschte Element vorhanden ist. Umschließen Sie dann das Parsing mit einem try/catch um zu verhindern, dass das Skript abstürzt.
request('GET', 'https://example.com');
// Prüfen Sie, ob das Zielelement existiert, bevor Sie versuchen, es zu extrahieren.
$elements = $crawler->filter('div.target-element');
if ($elements->count() > 0) {
// Das Element ist vorhanden, wir können es extrahieren.
$content = $elements->first()->text();
echo "Inhalt extrahiert: " . $content;
} else {
// Das Element wurde nicht gefunden.
echo "Das Zielelement wurde auf der Seite nicht gefunden.";
}
} catch (Exception $e) {
// Erfassung von Parsing-Fehlern
echo "Fehler beim Parsen der Seite: " . $e->getMessage();
}
}
// Aufruf der Funktion
scrape_website();
?>
2. Begrenzungen umgehen
Einige Websites setzen Schutzmechanismen ein, um das Scraping zu erschweren.
- ❗Blockieren nach IP : Sie können Proxys wie die der Bright-Data-Plattform verwenden.
- ❗ JavaScript : Standardmäßig kann PHP nicht JavaScript ausführen. Dazu ist die Verwendung eines Headless Browsers erforderlich.
- ❗ Roboter.txt : Bevor Sie scrapen, ist es wichtig, diese Datei zu überprüfen, um legal und verantwortungsvoll zu handeln.
Häufig gestellte Fragen
Ist Web Scraping legal?
📌 Die Legalität von Web Scraping ist ein komplexes Thema. In Frankreich wie auch anderswo hängt alles vom Rechtsrahmen, den gesammelten Daten und der Art und Weise, wie sie genutzt werden, ab.
Was ist der Unterschied zwischen Web Scraping und Web Crawling?
- das Web Scraping ist das Extrahieren präziser Daten von einer Website.
- das Webcrawling ist das Durchsuchen von Seiten, um sie zu indizieren.

Wie scrape ich eine Seite, die eine Authentifizierung (Login) erfordert?
Um eine Website zu scrapen, die eine Authentifizierung erfordert, müssen Sie die Verbindung simulieren. Bei PHP lautet die häufigste Lösung Guzzle.
Sie senden die Kennungen über eine POST-Anfrage und halten dann die Sitzung offen, um die geschützten Seiten abzurufen.
Wie geht man mit dem Scraping von Websites mit dynamischen, in AJAX geladenen Seiten um?
⚠ Zur Erinnerung: PHP kann clientseitigen JavaScript-Code nicht ausführen.
Um diese Art von Seiten mit PHP zu scrapen, können Sie verwenden BrowserShotEine Bibliothek, die einen echten Browser im Hintergrund (Headless Chrome/Chromium) verwendet, um die Seite zu laden und JavaScript auszuführen.
Eine andere Möglichkeit besteht darin PHP mit auf Node.js basierenden Tools integrierenEs gibt verschiedene Methoden, wie z. B. Puppeteer, um gerendertes HTML zu erzeugen und die Daten dann von PHP abzurufen.
Für jede Art von Web Scraping mit dynamischen Seiten können Sie auch spezialisierte Tools verwenden, die als headless browsers.
Gibt es Alternativen zu PHP für Web Scraping?
Ja, mehrere Sprachen sind beliebt :
- Python mit seinen leistungsstarken Bibliotheken wie BeautifulSoup und Scrapy.
- Node.js die sehr effektiv beim Scraping dynamischer Webseiten ist, indem sie Bibliotheken wie Puppeteer oder Cheerio verwendet.

Wie programmiert man einen „Scraper“ auf ethische und verantwortungsbewusste Weise?
Um ethisch korrekt zu scrapen, müssen Sie :
- ✔ Überprüfe die Datei robots.txt der Seite, um die Regeln zu erfahren.
- ✔ Die Häufigkeit Ihrer Suchanfragen begrenzen um den Server der Website nicht zu überlasten.
- ✔ Bedingungen einhalten Nutzung der Website.
- ✔ Keine persönlichen Daten sammeln sensible Daten ohne Genehmigung.
✅ Zusammenfassend lässt sich sagen, dass der Web Scraping ist eine mächtige Praxis, muss aber mit Methode und Verantwortung eingesetzt werden.
👉 Und Sie, haben Sie jemals einen scraper in PHP oder mit einer anderen Sprache? Teilen Sie Ihre Erfahrungen in einem Kommentar mit.





