#
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 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.