Die PHPCrawl Webcrawler Bibliothek

Es gibt diverse Webcrawler Dienste auf dem Markt, z.B. Strucr oder Botify. Beide sind kostenpflichtig und liefern eine sehr große Menge an Informationen, in der Regel zugeschnitten auf SEOs. Da werden 301 Fehler, Canonicals, fehlende title-Tags etc. aufgelistet. Für begrenzte Aufgaben – oder auch noch spezialisiertere – könnte man sich doch selber einen Crawler schreiben, oder? Für PHP gibt es hier Libraries, deren Funktionen einiges kapseln, was man sonst mit den Kernfunktionen von PHP mühsam stricken müsste.

Ich habe PHPCrawl ausprobiert. Hier eine kleine Beispiel Anwendung:

Mit

wird die Bibliothek eingebunden.

Dann wird eine Datenbankverbindung aufgemacht. Von der zentralen Klasse PHPCrawler wird eine eigene Klasse abgeleitet, die dazu dient die Funktionen die bei einem jeden Abruf einer neuen Seite ausgeführt werden, zu überschreiben. In

kann man implementieren, was mit den empfangenen Daten des HTTP Headers passieren sollen und mit

kann man die Eigenschaften des Dokuments analysieren. Hier beschränke ich mich auf das Ausgeben des Status Codes, der URL und der Seite, auf der der Link gefunden wurde. Außerdem werden die Daten in die Datenbank geschrieben.

Die meist voreingestellte maximale Ausführungszeit von PHP Skripten von 30 Sekunden wird in der Regel nicht ausreichen. Also wird sie auf 200 Sekunden erhöht.

Mit

wird der Crawl nun endlich abgeschickt. Die Ausgabe sieht dann so oder ähnlich aus:

id Status URL Quelle
854 200 http://www.aol.com
855 200 http://www.aol.com/?mobile=true http://www.aol.com
856 302 http://www.aol.com/?molhp=txtlnkusaolp00000051&icid=acm50options_mtmhp http://www.aol.com
857 200 http://www.aol.com/news/ http://www.aol.com
858 200 http://www.aol.com/sports/ http://www.aol.com
859 200 http://www.aol.com/entertainment/ http://www.aol.com
860 200 http://www.aol.com/lifestyle/ http://www.aol.com
861 200 http://www.aol.com/finance/ http://www.aol.com
862 200 http://www.aol.com/article/2015/04/02/prosecutors-lubitz-probed-suicide-methods-cockpit-security/21160730/ http://www.aol.com
863 200 http://www.aol.com/article/2015/04/01/alps-crash-bodies-recovered-but-families-must-wait-months/21160424/ http://www.aol.com

Der Inhalt der Datenbank so:

Unbenannt2

Im Download Paket der Bibliothek ist auch eine Beispielanwendung enthalten, bei der man über eine Weboberfläche alle Variablen des Crawles einstellen kann: Tiefe des Crawles, Maximales Datenvolumen, Dateitypen, die gecrawlt werden sollen, was letztendlich ausgegeben werden soll und vieles mehr:

Unbenannt3

Eine nützliche Hilfe, um zu entscheiden, an welchen Variablen man für seine eigene Anwendung schrauben möchte.

 

5 Gedanken zu „Die PHPCrawl Webcrawler Bibliothek“

  1. Hallo Jochen,
    habe dein php-script zu phpcrawl getestet, hätte aber gerne noch ein paar Infos dazu.
    1. muss ich es example.php wie die vorhandene nennen?
    2. in mysql habe ich die Datenbank crawl angelegt, welche Tabellen müssen zusätzlich erstellt werden?
    MfG
    Detlev

    1. Hallo Detlev,
      1. Die Datei kannst du nennen wie du willst, nur musst du sie dann mit dem Namen aufrufen, es sei denn du benebnst sie wie eine Standard Startdatei z.B. index.php oder default.php.
      2. Als einzige Tabelle benötigst du „urls“ mit den Feldern „id“, „URL“, „Quelle“, „Status“ (s. Screenshot im Artikel)

  2. Hallo Jochen,
    danke, dass du meinen Kommentar auf der falschen Seite gelöscht hast.
    Setze deine Vorschläge gleich mal um.
    Nach Aufruf von /test_interface/index.php
    wird gecrawled aber nichts in die Datenbank geschrieben.
    Gruß
    Detlev

    1. Hast du die Verbindungsdaten angepasst, bzw. sind die bei dir genauso?
      $verbindung = mysql_connect(„localhost“, „root“,““)

  3. Hallo Jochen,
    hier mein funktionierendes angepasstes php-script.
    Habe noch vor es auf mysqli umzustellen. Klappt aber nach x-Versuchen immer noch nicht!
    Gruß
    Detlev

    table, th, td {
    border:thin solid black;
    padding:2px;
    }
    table {
    border-collapse: collapse;
    }

    idHeaderQuellebytes_received
    <?php
    // aus:
    // http://quellenangeber.de/die-phpcrawl-webcrawler-bibliothek/
    // Bibliothek einbinden
    include("classes/phpcrawler.class.php");
    $verbindung = mysql_connect("localhost",
    "user","12345")
    or die ("keine Verbindung möglich.
    Benutzername oder Passwort sind falsch");
    mysql_select_db("crawl")
    or die ("Die Datenbank existiert nicht.");

    class MyCrawler extends PHPCrawler
    {
    protected $id;
    // kann man implementieren, was mit den empfangenen Daten des HTTP Headers passieren soll
    function handlePageData(&$page_data)
    //function handlePageInfo($PageInfo)
    {
    $eintrag = "INSERT INTO urls (id, Header, Quelle, bytes_received) VALUES ('$page_data[http_status_code]', '$page_data[header]', '$page_data[referer_url]', '$page_data[bytes_received]')";
    //$eintrag = "INSERT INTO urls (Quelle) VALUES ($page_data'referer_url')";
    mysql_query($eintrag) or die (mysql_error());
    echo "“.htmlentities($page_data[http_status_code]).““.htmlentities($page_data[header]).““.htmlentities($page_data[referer_url]).““.htmlentities($page_data[bytes_received]).“\n“;
    return 3;
    }
    }
    $crawler = &new MyCrawler();
    $crawler->setURL(‚http://www.aol.com/‘);
    $crawler->addReceiveContentType(„/text\/html/“);
    //$crawler->addNonFollowMatch(„/.(jpg|gif|png)$/ i“);
    $crawler->setCookieHandling(true);
    $crawler->setTrafficLimit(1000 * 1024);
    // PHP maximale Ausführungszeit von PHP Skripten von 30 Sekunden auf 200 Sekunden erhöhen
    if(set_time_limit(200)) {
    // mysql_query(„DELETE FROM urls“);
    // der Crawl nun endlich abgeschickt
    $crawler->go();
    } else
    echo „Maximum execution time cannot been set.\n“;

    mysql_close($verbindung);
    ?>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.