Umfassender Leitfaden zum Web Scraping mit PHP

Autor :

Reagieren :

Kommentieren

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.

PHP erleichtert das Web-Scraping, sodass Daten direkt von Webseiten schnell abgerufen und analysiert werden können.
PHP erleichtert das Web Scraping und ermöglicht das schnelle Abrufen und Analysieren von Daten direkt von Websites. ©Christina für Alucare.fr

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.
Bright Data: Das umfassendste Web-Scraping-Tool.
Bright Data: das umfassendste Tool für Web Scraping. ©Christina für Alucare.fr
  • 🔥 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 h2 um 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 href jeder Verknüpfung mit der Methode attr('href').
  • Die Titel und ihre URLs werden der Tabelle hinzugefügt. $itelund dann mit print_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 : Titel für den Titel des Artikels und url fü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.
Beim Webcrawling geht es um das automatische Erkunden und Entdecken mehrerer Websites, während sich das Web-Scraping darauf konzentriert, mithilfe spezieller Software präzise Daten aus einem bestimmten Ziel zu extrahieren.
Web Crawling besteht darin, mehrere Websites automatisch zu durchsuchen und zu entdecken, während sich Web Scraping darauf konzentriert, mithilfe spezieller Software bestimmte Daten aus einem bestimmten Ziel zu extrahieren. ©Christina für Alucare.fr

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.
Web Scraping mit Python funktioniert, indem Bibliotheken wie BeautifulSoup oder Scrapy verwendet werden, um Webseiten zu durchsuchen und automatisch die gewünschten Daten zu extrahieren.
Web Scraping mit Python funktioniert, indem Bibliotheken wie BeautifulSoup oder Scrapy verwendet werden, um Webseiten zu durchsuchen und automatisch die gewünschten Daten zu extrahieren. Christina für Alucare.fr

Wie programmiert man einen „Scraper“ auf ethische und verantwortungsbewusste Weise?

Um ethisch korrekt zu scrapen, müssen Sie :

  1. ✔ Überprüfe die Datei robots.txt der Seite, um die Regeln zu erfahren.
  2. Die Häufigkeit Ihrer Suchanfragen begrenzen um den Server der Website nicht zu überlasten.
  3. Bedingungen einhalten Nutzung der Website.
  4. 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.

Gefällt es Ihnen? Teilen Sie es!

Dieser Inhalt ist ursprünglich auf Französisch (Siehe den Redakteur oder die Redakteurin direkt unten.). Er wurde mit Deepl und/oder der Google-Übersetzungs-API in verschiedene Sprachen übersetzt und anschließend Korrektur gelesen, um in möglichst vielen Ländern Hilfe anbieten zu können. Diese Übersetzung kostet uns mehrere Tausend Euro pro Monat. Wenn sie zu 100 % nicht perfekt ist, hinterlassen Sie uns bitte einen Kommentar, damit wir sie korrigieren können. Wenn Sie daran interessiert sind, übersetzte Artikel zu lektorieren und ihre Qualität zu verbessern, schicken Sie uns bitte eine E-Mail über das Kontaktformular!
Wir freuen uns über Ihr Feedback, um unsere Inhalte zu verbessern. Wenn Sie Verbesserungsvorschläge machen möchten, nutzen Sie bitte unser Kontaktformular oder hinterlassen Sie unten einen Kommentar. Ihr Feedback hilft uns immer, die Qualität unserer Website zu verbessern Alucare.fr


Alucare ist ein unabhängiges Medium. Unterstützen Sie uns, indem Sie uns zu Ihren Google News-Favoriten hinzufügen:

Veröffentlichen Sie einen Kommentar im Diskussionsforum