Doogle ist eine Suchmaschine und ein Webcrawler, der indizierte Websites und Bilder durchsuchen und dann anhand von Schlüsselwörtern später durchsuchen kann.
Hauptsächlich in PHP im OOP-Stil geschrieben, mit der Absicht, OOP und die Funktionsweise von Webcrawlern besser zu verstehen.
Es werden zwei Einrichtungsmethoden besprochen.
Docker-Konfigurationsdateien sind unter doogle-docker verfügbar.
Vorausgesetzt, Sie haben Docker v3.9 (oder höher) bereits installiert und konfiguriert.
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
Auf Doogle kann jetzt über localhost:8000 zugegriffen werden.
Zum Debuggen wurde phpMyAdmin auch auf localhost:8001 eingebunden.
v1.0.0-beta.1 wird in PHP 7.4, 8.0 und 8.1 unterstützt und getestet.
Informationen zur Webserver-, PHP-Server- und MySQL-Serverkonfiguration finden Sie in XAMPP. XAMPP ist die einfachste Methode, da für die Nutzung von Doogle mehrere Server erforderlich sind.
MySQL Setup auf XAMPP verwendet PHPMyAdmin als GUI-Methode zum Einrichten der Datenbank.
Sobald Sie sich über PHPMyAdmin unter der Registerkarte PHPMyAdmin > SQL in der Datenbank angemeldet haben, kann der Inhalt von „doogle-tables-no-data.sql“ in das Feld eingefügt werden
mysql
pdo_mysql
Ändern Sie das Passwort PASSWORD_HERE mit einem sicheren Zufallspasswort.
mysql> CREATE USER IF NOT EXISTS 'doogle'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
Der SQL-Benutzer „doogle“ muss über die Berechtigungen SELECT, INSERT und UPDATE verfügen:
mysql> GRANT SELECT, INSERT, UPDATE ON `doogle`.* TO 'doogle'@'localhost';
In der Datei config.php muss für Ihre Datenbankkonfiguration Folgendes korrekt eingetragen sein:
$dbname = "doogle";
$dbhost = "localhost";
$dbuser = "doogle";
$dbpass = "";
In der Datei „doogle-tables-no-data.sql“ wird die Datenbank als „doogle“ angelegt.
Gehen Sie in Ihrem Browser zu dem Ort, an dem die Datei gehostet wird: http://localhost/crawl.php
Fügen Sie die URL in das Eingabefeld ein und klicken Sie auf die Schaltfläche „Crawlen“.
Am Ende von crawl-manual.php gibt die Variable $startUrl an, wo die URL der zu crawlenden Website eingefügt werden soll:
$startUrl = "https://thehackernews.com/";
Gehen Sie dann in Ihrem Browser zu dem Ort, an dem die Datei gehostet wird: http://localhost/crawl-manual.php
Der Crawling-Vorgang dauert einige Zeit und hängt vollständig von der Größe der gecrawlten Website ab. Die Seite wird weiter geladen (ohne Ausgabe), bis das crawl.php
-Skript abgeschlossen ist.
Überprüfen Sie die images
und sites
in der Datenbank, um sicherzustellen, dass sie gefüllt werden.
Sobald die Tabellen gefüllt sind, besuchen Sie die Doogle-Homepage und suchen Sie! Siehe Vorschaubilder.
In search.php ist die Paginierung implementiert
Im obigen Beispiel ist currentPage=11. Die Anzahl der anzuzeigenden Seiten beträgt immer 10.
Die Site-Suche liefert 20 Ergebnisse pro Seite und die Bildersuche liefert 30 Ergebnisse pro Seite.
Die Ergebnisse pro Seite können in search.php jeweils in den Zeilen {83, 88} geändert werden. Wie durch die $pageSize-Variablen angegeben:
Ein Randfall kann auftreten, wenn keine Seiten mehr verfügbar sind.
Für 331 Ergebnisse stehen also 17 Seiten zur Verfügung. Ohne die Berücksichtigung eines Randfallszenarios ermöglicht die Benutzeroberfläche des Paginierungssystems jedoch das Scrollen durch Seiten, die nicht vorhanden sind. was ein leeres Ergebnis zurückgeben würde.
Um einen Randfall zu behandeln, wird die folgende Logik in der While-Schleife implementiert:
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
Um die Bildsuche informativer zu gestalten, ist das „alt“-Tag Teil des Suchbegriffs. Wie in ./classes/ImageResultsProvider.php Zeile 34 gezeigt
In der Tabelle „Bilder“ gibt es eine Zeile „kaputt“, in der Bilder verfolgt werden, die einen Fehler zurückgeben.
Da Bilder bereits mit einer rein serverseitigen Lösung geladen werden, muss AJAX genutzt werden, um Bilder dynamisch zu laden. Was in ./assets/js/script.js angezeigt wird
Für die Bildsuche wird die Bibliothek Masonry – Cascading Grid Layout verwendet.
Masonry ermöglicht Bildern ein Rasterlayout, das dank jQuery reagiert. Das Bild unten zeigt ein Beispiellayout:
Wie in den Vorschaubildern gezeigt, gibt Doogle bei der Durchführung einer Website-Suche für jedes Ergebnis (Titel, URL und Beschreibung) zurück.
Um jedoch einige Ergebnisse leichter lesbar zu machen, wird ein Trimmvorgang durchgeführt. Innerhalb von ./classes/SiteResultsProvider.php wird die Funktion trimField() aufgerufen:
Titel werden auf 55 Zeichen und Beschreibungen auf 230 Zeichen gekürzt.
Sowohl die Tabellen „Bilder“ als auch „Sites“ in der Datenbank verfügen über eine Zeile mit „Klicks“ für jede Spalte.
Das Feld „Klicks“ wird jedes Mal erhöht, wenn eine Website besucht oder ein Bild in der Vorschau angezeigt wird.
Bei der Durchführung einer Suche werden die zurückgegebenen Ergebnisse in absteigender Reihenfolge der Klicks geordnet. Dieses Verhalten wird durch die $query in der Funktion getResultsHtml() von ./classes/SiteResultsProvider.php angezeigt. Siehe Zeile 43.
In ./classes/DomDocumentParser.php befinden sich die beim Crawlen verwendeten User-Agent-Daten. Wie in Zeile 9 angegeben:
Die Bildvorschau erfolgt mit Fancybox.
Der Titel, die Bild-URL und die Website-URL sind in der unteren linken Ecke verfügbar.
Natürlich können bestimmte Suchbegriffe viele Ergebnisse wie „bbc“ zurückgeben.
Wobei Doogle nur 20 Websites pro Seite anzeigt. Unten auf der Seite können wir die nächsten 10 Seiten sehen.
Ein HTML-Formular zum Senden einer URL zum Crawlen
Doogle Search-Demo – YouTube