#
PHP Scraper: das web utility für PHP

PHP Scraper: Scraping und Crawling einfach gemacht

Unit Tests Total Downloads Latest Version License

Von Peter Thaleikis

PHPScraper ist eine Scraping-Bibliothek ohne Schnickschnack für PHP. Bei PHPScraper handelt sich dabei um einen Wrapper um einige großartige PHP-Bibliotheken, die den Zugriff auf das Web erleichtern.

Die Beispiele vermitteln die Idee besser. Einen Blick wert!

# Die Idee 💡️

Der Zugriff auf Websites und das Sammeln grundlegender Informationen aus dem Web ist oft zu komplex. Dieser Wrapper um BrowserKit (opens new window) (vorher Goutte (opens new window)) macht es einfacher. Er erspart Ihnen XPath und Co. und ermöglicht Ihnen den direkten Zugriff auf alles, was Sie brauchen. Web Scraping mit PHP etwas anders.

# Unterstützer 💪️

Dieses Projekt wird gesponsert von:

Möchten Sie dieses Projekt unterstützen? Schreib mir (opens new window).

# Beispiele: Code sagt mehr als Tausend Worte.

Hier sind einige Beispiele dafür, was die Web-Scraping-Bibliothek an dieser Stelle tun kann:

# Meta-Informationen Scrapen:

$web = new \Spekulatius\PHPScraper\PHPScraper;

/**
 * Navigate to the test page. It contains:
 *
 * <meta name="author" content="Lorem ipsum" />
 * <meta name="keywords" content="Lorem,ipsum,dolor" />
 * <meta name="description" content="Lorem ipsum dolor etc." />
 * <meta name="image" content="https://test-pages.phpscraper.de/assets/cat.jpg" />
 */
$web->go('https://test-pages.phpscraper.de/meta/lorem-ipsum.html');

// Get the information:
echo $web->author;          // "Lorem ipsum"
echo $web->description;     // "Lorem ipsum dolor etc."
echo $web->image;           // "https://test-pages.phpscraper.de/assets/cat.jpg"

Nahezu alle Informationen können direkt als string oder array genutzt werden.

# Scrapen von Inhalten, beispielsweise Bilder:

$web = new \Spekulatius\PHPScraper\PHPScraper;

/**
 * Navigate to the test page. This page contains two images:
 *
 * <img src="https://test-pages.phpscraper.de/assets/cat.jpg" alt="absolute path">
 * <img src="/assets/cat.jpg" alt="relative path">
 */
$web->go('https://test-pages.phpscraper.de/meta/lorem-ipsum.html');

var_dump($web->imagesWithDetails);
/**
 * [
 *     'url' => 'https://test-pages.phpscraper.de/assets/cat.jpg',
 *     'alt' => 'absolute path',
 *     'width' => null,
 *     'height' => null,
 * ],
 * [
 *     'url' => 'https://test-pages.phpscraper.de/assets/cat.jpg',
 *     'alt' => 'relative path',
 *     'width' => null,
 *     'height' => null,
 * ]
 */

Hier werden einige zusätzliche, optionale Informationen im Array als Details zurückgegeben. Alternativ ist für dieses Beispiel ist auch eine vereinfachte Liste nur mit den Bildern mit $web->images verfügbar:

// Wie oben.

var_dump($web->images);
/**
 * [
 *     'https://test-pages.phpscraper.de/assets/cat.jpg',
 *     'https://test-pages.phpscraper.de/assets/cat.jpg',
 * ]
 *
 * // Hinweis: Doppelt, da die Seite das Bild mehrfach enthält.
 */

Mehr Beispielcode finden Sie in den Einzelbeispielen und in den Tests.

# Installation

Die Installation erfolgt üblicherweise mit Composer (opens new window).

# Installation mit Composer

composer require spekulatius/phpscraper

Nach Abschluss der Installation wird das Paket vom Composer-Autoloader geladen. Damit wird in den meisten PHP applikationen sichergstellt, dass die Klassen entsprechend geladen werden können. Mit dem Scrapen kann direkt begonnen werden. Sie können nun eines der aufgeführten Beispiele oder weiteren Beispiele aus den tests/ verwenden.

# Verwendung in VanillaPHP-Projekten

Wenn Sie ein VanillaPHP-Projekt bauen, müssen Sie den Autoloader oben im Skript einbinden:

require 'vendor/autoload.php';

Wenn Sie ein Framework wie Laravel, Symfony, Laminas, Phalcon, oder CakePHP verwenden, brauchen Sie diesen Schritt nicht. Der Autoloader übernimmt die Arbeit.

# Konfiguration

Die weitere Konfiguration ist optional. Unterhalb finden Sie die gegenwärtig verfügbaren Optionen:

# Proxy

Falls Sie Proxies benötigen können Sie PHPScraper wie folgt konfigurieren:

$web->setConfig(['proxy' => 'http://user:password@127.0.0.1:3128']);

TIP

Falls Sie nach einem günstigen Proxy suchen ist IProyal (opens new window) einen Blick wert.

# Timeout setzen

Das timeout kann mit setConfig gesetzt werden:

$web->setConfig(['timeout' => 15]);

Der timeout kann mit 0 gedeaktiviert werden.

# Disabling SSL

Während es nicht empfohlen ist, kann es notwendig sein die SSL checks zu deaktivieren. Dies kann wie folgt erreicht werden:

$web->setConfig(['disable_ssl' => true]);

setConfig kann mehrfach aufgerufen werden. Es speichert die Konfiguration und merged frühere Einstellungen. Dies sollte bedacht werden, wenn man etwas zurücksetzen will.

# Ein Problem gefunden und gefixt? Super!

Bevor Sie loslegen, machen Sie sich mit den Contribution Guidelines vertraut. Bei Fragen bitte eine kurze Nachricht oder Email.

# Tests: Damit es wirklich funktioniert!

Der Code wird grob mit End-to-End-Tests abgedeckt. Dazu werden einfache Webseiten unter https://test-pages.phpscraper.de/ gehostet, geladen und geparst mit PHPUnit (opens new window). Diese Tests sind auch als Beispiele geeignet - siehe tests/!

Trotzdem gibt es wahrscheinlich Randfälle, die nicht funktionieren und Probleme verursachen können. Wenn Sie einen finden, melden Sie bitte einen Fehler auf GitHub.