Web Scraping mit PHP: eine Schritt-für-Schritt-Anleitung

Lernen Sie, wie Sie Ihren eigenen einfachen Web Scraper in PHP von Grund auf erstellen und programmieren können.
3 min read
Web scraping with PHP

PHP (Hypertext Preprocessor) ist eine Skriptsprache für die Webentwicklung, die für das Sammeln von Webdaten verwendet werden kann. In diesem Beitrag gehen wir auf Folgendes ein:

Gründe für die Verwendung von PHP

PHP ist derzeit für ca. 40 % des Webs verantwortlich, darunter Websites wie WordPress, Slack und Facebook. Es ist eine der beliebtesten serverseitigen Skriptsprachen, wenn es um Webentwicklung geht. Die Datenbanken von MySQL sind eng miteinander verwandt. Es ist eine relativ einfach zu erlernende Sprache mit guter Dokumentation und Bibliotheken, die die Entwicklungszeit verkürzen können.

Erste Schritte mit PHP

In diesem Leitfaden wird eine Methode des manuellen Web Scraping vorgestellt, bei der Sie einen Bot an einen Webserver senden und Daten mit PHP als grundlegender Programmiersprache sammeln. Dies steht im Gegensatz zur Verwendung eines vollautomatischen Datenerfassungstools, das den Prozess vereinfachen und optimieren kann.  

Der Web Scraper funktioniert, indem er eine HTTP-Anfrage an den Server sendet und dann den Code der Website sammelt. Wir werden Ihnen dann zeigen, wie Sie die abgerufenen Informationen auswerten können.

Hier ist ein Beispiel für einen Code-Ausschnitt, der in der Überschrift einer Website erscheinen kann, die Sie scrapen möchten:

<html><body><h1>This is a heading!</h1></body></html>

Nach dem Abruf muss dieser Code geparst werden, damit der Text von menschlichen Analytikern gelesen und verstanden werden kann. In diesem Beispiel erhalten Sie nach dem Parsen den folgenden reinen Text:

‘This is a heading!’

Bevor Sie beginnen, stellen Sie sicher, dass Sie PHP auf Ihrem Computer installiert haben.

Web Scraping mit PHP in 3 einfachen Schritten

Erster Schritt: Erfassen des Codes Ihrer Ziel-Website

Beginnen Sie mit der Eingabe des folgenden Codes:

<?php
$code = file_get_contents (“http://quotes.toscrape.com”); 
?>

Zu den grundlegenden Regeln der Kodierung:

  • „<?php“ und „?>“ werden in der gesamten PHP-Dokumentation am Anfang und am Ende von Befehlen verwendet.  
  • In der zweiten Zeile wird eine Variable mit der Bezeichnung „$code“ gesetzt, die sich auf den Inhalt der betreffenden URL bezieht, die wir in diesem Beispiel ansteuern werden: “http://quotes.toscrape.com”. Dies hilft, den URL-Code in der Variablen „$code“ zu speichern.  

Bevorzugen Sie eine vollautomatische Web Scraping Lösung?

Zweiter Schritt: Parsen der Webseite

Diese Aufgabe zielt darauf ab, alle Zitate von dieser Website zu sammeln:

Zitat-Text auf einer Zitat-Website

Rechtsklicken Sie auf Ihre Zielseite und klicken Sie auf „Seitenquelltext anzeigen“. Es öffnet sich ein neues Fenster mit dem Quellcode. Bei unserem Beispiel werden Sie feststellen, dass alle Zitate in -Tags mit der Klasse „text“ enthalten sind, wobei das itemprop-Attribut ebenfalls auf „text“ gesetzt ist, und zwar:

Zitat-Code-Beispiel

Wir beginnen damit, PHP zu verwenden, um den gesamten unerwünschten Text im Code zu entfernen, mit Ausnahme der Anführungszeichen in den -Tags, und ihn dann mit der Funktion „echo“ auf dem Bildschirm anzuzeigen:

<?php
$code = file_get_contents("http://quotes.toscrape.com");
$code = str_replace(">", "<>", $code);

$splitCode = explode("<", $code);

// Find the first occurance of the opening tag of the quotes: 
$openingTag = array_search('span class="text" itemprop="text"', $splitCode, true);

// Find the first occurance of the closing tag of the quotes 
$closingTag = array_search('/span', $splitCode, true);

// Now, find the text in between the tags 
$i = $openingTag;
$total = "";
while ($i < $closingTag) {
	$total = $total . $splitCode[$i];
	$i = $i + 1;
}
$final = substr($total, 37);
echo $final;
?>

In Zeile 2 werden alle Vorkommen von „>“ im Code durch „“ ersetzt. Dadurch kann es zusammen mit „-Tags, und in Zeile 11 die Position des schließenden -Tags.

Jetzt muss nur noch der Text zwischen diesen beiden Vorkommen abgerufen werden. Zu diesem Zweck wird eine Variable mit dem Namen „i“ erstellt, die den Wert der Variablen „opening tag“ enthält. Anschließend wird eine Variable erstellt, in die das Ergebnis später eingegeben wird. In Zeile 16 beginnt sie jeden Buchstaben nach dem öffnenden Tag in einer Schleife zu durchlaufen, addiert den Buchstaben zum Gesamtwert und erhöht dann die Variable „i“. Nach dem schließenden Tag wird die Schleife angehalten.

Anschließend werden die ersten 37 Ziffern der endgültigen Zeichenkette gelöscht, da diese ersten 37 Ziffern in dem zu analysierenden Tag, dem -Tag, enthalten sind. Schließlich wird das Endergebnis mit Hilfe der „echo-Funktion“ abgerufen.

Wenn Sie das Programm ausführen, sieht es ungefähr so aus:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.” 

Das ist das erste Zitat auf der Website, das wir ohne den „nicht benutzerfreundlichen“ Code auslesen.

Dritter Schritt: In einer Schleife durchlaufen

Sie haben vielleicht bemerkt, dass nur das erste Vorkommen erfasst wird und danach keines mehr. Um dies zu beheben, können wir einfach die gerade zurückgegebenen Vorkommen löschen und den Vorgang wiederholen, bis wir alle abgerufen haben. Außerdem können wir unseren Code vereinfachen, indem wir den Scraping-Prozess in eine Funktion packen, sodass er immer dann ausgeführt werden kann, wenn wir ihn brauchen. Probieren Sie diesen Code aus:

<?php 
$code = file_get_contents("http://quotes.toscrape.com");
$code = str_replace(">", "<>", $code); 

$splitCode = explode("<", $code);

function parseCode($splitCode) {
	// Find the first occurance of the opening tag of the quotes:
	$openingTag = array_search('span class="text" itemprop="text"', $splitCode, true);
	
	// Find the first occurance of the closing tag of the quotes: 
	$GLOBALS[closingTag] = array_search('/span', $splitCode, true);
	
	// Now, find the text in between the tags 
$i = $openingTag;
$total = "";
while ($i < $GLOBALS["closingTag"]) {
	$total = $total . $splitCode[$i];
	$i = $i + 1;
}
// Run the function, then update splitCode to delete the previous occurance 
// that it can be repeated for the next quote, then loop through 3 times 
// (You can change how many times):
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);
$splitCode = array_slice($splitCode, $GLOBALS["closingTag"]-1, NULL, TRUE);
parseCode($splitCode);

?>

Sie haben vielleicht bemerkt, dass unser vorheriger Code in eine Funktion namens „parseCode“ eingegeben wurde, die einen Parameter namens „$splitCode“ enthält, sodass sie auf den Code zugreifen und das Ergebnis „echo“ ausgeben kann. Die Funktion „parseCode“ wird in Zeile 27 ausgeführt, und in Zeile 28 löscht unser Programm das vorherige Vorkommen des schließenden Tags, sodass es anschließend repliziert werden kann. Die Zeilen 27 und 28 werden einfach ca. 3 Mal wiederholt, damit das Programm ein Muster erkennen und das nächste Vorkommen entdecken kann.

Schließlich geben wir das schließende Tag als „globale Variable“ mit dem superglobalen Geltungsbereich „$GLOBALS“ ein, und in Zeile 21 geben wir <p>-Tags um jede zurückgegebene Zeile ein, sodass es für jedes neu analysierte Zitat eine neue Zeile erstellt. Dies ist das Ergebnis:

“The world we have created it is a process of our thinking. It cannot be changed without changing our thinking.”

“There are only two ways to live your life. One is as though nothing is a miracle. The Other is as though everything is a miracle.” 

“Try not to become a man of success. Rather become a man of value.”

Das Ergebnis ist genau das, wonach wir gesucht haben. Kein Code, nur lesbarer Text. Dieser Prozess kann für nahezu jede Zielseite repliziert werden, wie z. B. das Scrapen von eBay nach Zieldatenpunkten wie Produktpreisen, Bewertungen und SKUs (Stock Keeping Units).  

Fazit

Die Verwendung von PHP zum Scrapen des Internets nach Zieldaten kann ein effektiver, wenn auch langsamer/manueller Prozess sein. Eine praktikable Alternative, die Unternehmen in Erwägung ziehen sollten, ist der Kauf gebrauchsfertiger Datensätze. Dies spart Zeit und Ressourcen und ermöglicht es Ihnen und Ihrem Team, sich voll und ganz auf den Ausbau Ihres Unternehmens, die Kundenzufriedenheit und die Produktentwicklung zu konzentrieren. Natürlich können Sie auch mit unserer erweiterten Web Scraper IDE beginnen; klicken Sie einfach auf die Schaltfläche unten.  

More from Bright Data

Datasets Icon
Get immediately structured data
Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.
Web scraper IDE Icon
Build reliable web scrapers. Fast.
Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data’s Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.
Web Unlocker Icon
Implement an automated unlocking solution
Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?