ZAČÁTKYNÁVODYOOPDOKUMENTACE

Herunterladen der gesamten Website über Links in PHP

06. 11. 2019

Obsah článku

Relativ häufig löse ich die Aufgabe des Herunterladens aller Seiten innerhalb einer Website oder Domäne, weil ich dann verschiedene Messungen mit den Ergebnissen durchführe oder die Seiten für eine Volltextsuche verwende.

Eine mögliche Lösung ist die Verwendung des vorgefertigten Tools [Xenu] (http://home.snafu.de/tilman/xenulink.html), das sehr schwierig auf einem Webserver zu installieren ist (es ist ein Windows-Programm), oder [Wget] (https://www.gnu.org/software/wget/), das nicht überall unterstützt wird und eine weitere unnötige Abhängigkeit schafft.

Wenn die Aufgabe nur darin besteht, eine Kopie der Seite für die spätere Betrachtung zu erstellen, ist das Programm [HTTrack] (https://www.httrack.com/) sehr nützlich, das ich am meisten mag, nur wenn wir parametrisierte URLs indizieren, können wir in einigen Fällen an Genauigkeit verlieren.

Also habe ich mich auf die Suche nach einem Tool gemacht, das alle Seiten automatisch direkt in PHP mit erweiterter Konfiguration indizieren kann. Schließlich wurde daraus ein Open-Source-Projekt.

Baraja WebCrawler

Für genau diese Bedürfnisse habe ich mein eigenes Composer-Paket [WebCrawler] (https://github.com/baraja-core/webcrawler) implementiert, das den Prozess der Indizierung von Seiten elegant allein bewältigen kann, und wenn ich auf einen neuen Fall stoße, verbessere ich es weiter.

Es wird mit dem Befehl Composer installiert:

composer require baraja-core/webcrawler

Und es ist einfach zu bedienen. Erstellen Sie einfach eine Instanz und rufen Sie die Methode "crawl()" auf:

$crawler = new \Baraja\WebCrawler\Crawler;
$result = $crawler->crawl('https://example.com');

In der Variablen $result steht das vollständige Ergebnis als Instanz der Entität CrawledResult zur Verfügung, deren Untersuchung ich empfehle, da sie viele interessante Informationen über die gesamte Website enthält.

Crawler-Einstellungen

Oft müssen wir das Herunterladen von Seiten irgendwie begrenzen, weil wir sonst wahrscheinlich das ganze Internet herunterladen würden.

Dazu wird die Entität "Config" verwendet, der die Konfiguration als Array (Schlüssel-Wert) übergeben wird und die dann vom Konstruktor an den Crawler übergeben wird.

Zum Beispiel:

$crawler = new \Baraja\WebCrawler\Crawler(
new \Baraja\WebCrawler\Config([
// Schlüssel => Wert
])
);

Einstellungsmöglichkeiten:

Schlüssel Standardwert Mögliche Werte
followExternalLinks false Bool: Nur innerhalb der gleichen Domain bleiben? Kann es auch externe Links indizieren?
sleepBetweenRequests 1000 Int: Wartezeit zwischen dem Herunterladen der einzelnen Seiten in Millisekunden.
maxHttpRequests 1000000 Int: Wie viele URLs werden maximal heruntergeladen?
maxCrawlTimeInSeconds 30 Int: Wie lange ist der maximale Download in Sekunden?
allowedUrls ['.+'] String[]: Array der erlaubten URL-Formate als reguläre Ausdrücke.
forbiddenUrls [''] String[]: Array von verbotenen URL-Formaten als reguläre Ausdrücke.

Der reguläre Ausdruck muss mit der gesamten URL als Zeichenkette übereinstimmen.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.